我有一个这样的数据框:

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

#1 楼

使用sort_values按特定列的值对df排序:根据排序优先级排序。如果使用sort_values,则结果将按df.sort_values(['2', '0'])列然后按2列进行排序。当然,对于本示例来说,这实际上没有任何意义,因为0中的每个值都是唯一的。

评论


上述解决方案对我不起作用。应该根据以下答案进行更改。

–纳菲斯·艾哈迈德(Nafees Ahmad)
8月10日12:14



@NafeesAhmad OP希望结果​​按升序排列,这与其他答案不同

– EdChum
8月10日12:45

#2 楼

我尝试了上述解决方案,但没有取得结果,因此我找到了一个对我有用的解决方案。 ascending = False是按降序对数据帧进行排序,默认情况下为True。我正在使用python 3.6.6和pandas 0.23.4版本。

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


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

#3 楼

就像另一种解决方案一样:
您可以对字符串数据(月份名称)进行分类,而不是创建第二列,并按如下所示进行排序:
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

#4 楼

使用列名对我有用。
sorted_df = df.sort_values(by=['Column_name'], ascending=True)


#5 楼

只是添加一些对数据的操作。假设我们有一个数据帧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


#6 楼

这是根据pandas文档的sort_values模板。
 DataFrame.sort_values(by, axis=0,
                          ascending=True,
                          inplace=False,
                          kind='quicksort',
                          na_position='last',
                          ignore_index=False, key=None)[source]
 

在这种情况下,将是这样。
df.sort_values(by=['2'])
API参考pandas.DataFrame.sort_values

#7 楼

这对我有用
df.sort_values(by='Column_name', inplace=True, ascending=False)