1

pandas.DataFrame を使用した (非常に大きな) テーブルがあります。テキストの単語数が含まれています。インデックスは単語リストです:

             one.txt  third.txt  two.txt
a               1          1        0
i               0          0        1
is              1          1        1
no              0          0        1
not             0          1        0
really          1          0        0
sentence        1          1        1
short           2          0        0
think           0          0        1 

すべてのテキストの単語の頻度で単語リストを並べ替えたいと思います。したがって、各単語の頻度の合計を含むシリーズを簡単に作成できます (単語をインデックスとして使用)。しかし、どうすればこのリストを並べ替えることができるでしょうか?

簡単な方法の 1 つは、リストを列としてデータフレームに追加し、並べ替えてから削除することです。パフォーマンス上の理由から、これは避けたいと思います。

他の 2 つの方法についてはこちらで説明していますが、1 つはサイズが原因で問題となるデータフレームを複製し、もう 1 つは新しいインデックスを作成しますが、さらに下の単語に関する情報が必要です。

4

1 に答える 1

2

頻度を計算し、sortメソッドを使用してインデックスの目的の順序を見つけることができます。次にdf.loc[order.index]、元の DataFrame を並べ替えるために使用します。

order = df.sum(axis=1).sort(inplace=False)
result = df.loc[order.index]

例えば、

import pandas as pd

df = pd.DataFrame({
    'one.txt': [1, 0, 1, 0, 0, 1, 1, 2, 0],
    'third.txt': [1, 0, 1, 0, 1, 0, 1, 0, 0],
    'two.txt': [0, 1, 1, 1, 0, 0, 1, 0, 1]}, 
    index=['a', 'i', 'is', 'no', 'not', 'really', 'sentence', 'short', 'think'])

order = df.sum(axis=1).sort(inplace=False, ascending=False)
print(df.loc[order.index])

収量

          one.txt  third.txt  two.txt
sentence        1          1        1
is              1          1        1
short           2          0        0
a               1          1        0
think           0          0        1
really          1          0        0
not             0          1        0
no              0          0        1
i               0          0        1
于 2013-10-05T10:58:55.100 に答える