自定义排序pandas数据帧

时间:2013-10-05 10:03:21

标签: python sorting pandas

我有一个使用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,但是由于其大小而重复数据帧是一个问题,而另一种方法创建了一个新的索引,但是我需要有关这些词的信息。

1 个答案:

答案 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