如何从一列中排序熊猫数据框


237

我有一个像这样的数据框:

print(df)

        0          1     2
0   354.7      April   4.0
1    55.4     August   8.0
2   176.5   December  12.0
3    95.5   February   2.0
4    85.6    January   1.0
5     152       July   7.0
6   238.7       June   6.0
7   104.8      March   3.0
8   283.5        May   5.0
9   278.8   November  11.0
10  249.6    October  10.0
11  212.7  September   9.0

如您所见,月份不是按日历顺序排列的。因此,我创建了第二列以获取与每月(1-12)相对应的月份号。从那里,如何根据日历月的顺序对数据框进行排序?

Answers:


325

用于sort_values按特定列的值对df进行排序:

In [18]:
df.sort_values('2')

Out[18]:
        0          1     2
4    85.6    January   1.0
3    95.5   February   2.0
7   104.8      March   3.0
0   354.7      April   4.0
8   283.5        May   5.0
6   238.7       June   6.0
5   152.0       July   7.0
1    55.4     August   8.0
11  212.7  September   9.0
10  249.6    October  10.0
9   278.8   November  11.0
2   176.5   December  12.0

如果要按两列进行排序sort_values,请将列标签列表传递给,并根据排序优先级对列标签进行排序。如果使用df.sort_values(['2', '0']),结果将按列2然后按列排序0。当然,对于这个示例,这实际上没有任何意义,因为其中的每个值df['2']都是唯一的。


75

我尝试了上述解决方案,但没有取得结果,因此我找到了一个对我有用的解决方案。该升=假是订购数据框在递减顺序,默认为真。我正在使用python 3.6.6和pandas 0.23.4版本。

final_df = df.sort_values(by=['2'], ascending=False)

您可以在此处查看pandas文档中的更多详细信息。


9

只是添加一些对数据的操作。假设我们有一个数据框df,我们可以执行几个操作以获得所需的输出

ID         cost      tax    label
1       216590      1600    test      
2       523213      1800    test 
3          250      1500    experiment

(df['label'].value_counts().to_frame().reset_index()).sort_values('label', ascending=False)

sorted标签输出作为dataframe

    index   label
0   test        2
1   experiment  1

7

就像另一个解决方案:

您可以对字符串数据(月份名称)进行分类并按如下方式进行排序:

df.rename(columns={1:'month'},inplace=True)
df['month'] = pd.Categorical(df['month'],categories=['December','November','October','September','August','July','June','May','April','March','February','January'],ordered=True)
df = df.sort_values('month',ascending=False)

它将month name按照您在创建Categorical对象时指定的顺序为您提供排序的数据。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.