Python 如何从一列对数据帧进行排序
我有这样一个数据框:Python 如何从一列对数据帧进行排序,python,pandas,dataframe,sorting,time,Python,Pandas,Dataframe,Sorting,Time,我有这样一个数据框: 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
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)。在此基础上,如何根据日历月的顺序对该数据框进行排序?用于按特定列的值对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\u values
,列标签按排序优先级排序。如果使用df.sort_值(['2','0'])
,则结果将按列2
排序,然后按列0
排序。诚然,这对于本例来说并没有真正意义,因为df['2']
中的每个值都是唯一的。只是在数据上添加了更多的操作。假设我们有一个数据帧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)
将标签的排序
输出作为数据帧
index label
0 test 2
1 experiment 1
我尝试了上面的解决方案,但没有取得任何效果,因此我找到了一个适合我的不同解决方案。升序=假是按降序对数据帧进行排序,默认情况下为真。我使用的是python 3.6.6和pandas 0.23.4版本
final_df = df.sort_values(by=['2'], ascending=False)
您可以在pandas文档中查看更多详细信息。另一个解决方案是: 您可以对字符串数据(月份名称)进行分类并按如下方式排序,而不是创建第二列:
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)
它将按照您在创建
分类
对象时指定的月名
为您提供已排序的数据。以下是根据熊猫文档排序值的模板
DataFrame.sort_值(按,轴=0,
升序=真,
原地=假,
“快速排序”,
na_position='last',
忽略_index=False,key=None)[来源]
在这种情况下,它将是这样的
df.sort_值(按=['2'])
API参考使用列名对我很有用
sorted_df = df.sort_values(by=['Column_name'], ascending=True)
这对我有用
df.sort_values(by='Column_name', inplace=True, ascending=False)
熊猫的工作
如果想要保持相同的变量名,请不要忘记inplace=True
(这将执行适当的操作)
您还可以将更改(排序)分配给一个可能具有相同名称的变量,例如df
as
df = df.sort_values(by=['2'])
忘记上述步骤可能会导致无法获得预期结果
请注意,如果希望按降序排列,则需要传递ascending=False
,例如
df = df.sort_values(by=['2'], ascending=False)
这一个对我有用:
df=df.sort_values(by=[2])
鉴于:
df=df.sort_values(by=['2'])
无效。上述解决方案对我无效。它应该根据下面的答案进行更改。@NafeesAhmad OP希望结果按升序排列,这与其他答案不同
df=df.sort_values(by=['2'])