我有一个使用pandas.DataFrame的(非常大的)表。它包含来自文本的字数;索引是wordlist:
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
我想按照所有文本中单词的频率对单词表进行排序。所以我可以很容易地创建一个包含每个单词的频率和的系列(使用单词作为索引)。但是我怎么能在这个清单上排序呢?
一种简单的方法是将列表作为列添加到数据框中,对其进行排序然后将其删除。出于性能原因,我想避免这种情况。
其他两种方式被描述为here,但是由于其大小而重复数据帧是一个问题,而另一种方法创建了一个新的索引,但是我需要有关这些词的信息。
答案 0 :(得分: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