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进行排序:

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

只是在数据上添加更多的操作。假设我们有一个数据帧
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文档中看到更多详细信息。

我尝试了上述解决方案,但没有取得效果,因此我找到了一种适合我的不同解决方案。升序=假是按降序对数据帧进行排序,默认情况下为真。我使用的是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)

它将按照创建
分类对象时指定的
月名
为您提供已排序的数据。

就像另一个解决方案一样:

您可以对字符串数据(月份名称)进行分类并按如下方式排序,而不是创建第二列

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参考

这里是根据熊猫文档排序值的模板

DataFrame.sort_值(按,轴=0,
升序=真,
原地=假,
“快速排序”,
na_position='last',
忽略_index=False,key=None)[来源]
在这种情况下,它将是这样的

df.sort_值(按=['2'])


API参考

使用列名对我很有用

sorted_df = df.sort_values(by=['Column_name'], ascending=True)

使用列名对我很有用

sorted_df = df.sort_values(by=['Column_name'], ascending=True)
这对我有用

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

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)
熊猫的工作

如果想要保持相同的变量名,请不要忘记
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']) 

不起作用。

这个对我起作用了:

df=df.sort_values(by=[2])
鉴于:

df=df.sort_values(by=['2']) 

无效。

上述解决方案对我无效。它应该根据下面的答案进行更改。@NafeesAhmad OP希望结果按升序排列,这与其他答案不同。上面的解决方案不适用于我。它应该根据下面的答案进行更改。@NafeesAhmad OP希望结果按升序排列,这与其他答案不同