如何从一列对pandas数据帧进行排序

2020-12-02 21:08:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的数据框:

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)对应的月份号。从那里开始,如何根据日历月份的顺序对数据框进行排序?

3条回答
网友
1楼 ·

只是在数据上增加一些操作。假设我们有一个数据帧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
网友
2楼 ·

我尝试了上面的解决方案,但没有取得效果,所以我找到了一个适合我的不同解决方案。升序=假是按降序顺序排列数据帧,默认情况下为真。我使用的是Python3.6.6和Pandas0.23.4版本。

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

您可以在pandas文档here中看到更多详细信息。

网友
3楼 ·

使用^{}按特定列的值对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']中的每个值都是唯一的。

相关问题