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

时间:2016-06-13 10:44:09

标签: python pandas sorting

我有一个这样的数据框:

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

10 个答案:

答案 0 :(得分:178)

使用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']中的每个值都是唯一的。

答案 1 :(得分:31)

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

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

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

答案 2 :(得分:11)

使用列名对我有用。

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

答案 3 :(得分: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

答案 4 :(得分:5)

Panda 的 sort_values 负责。

如果打算保留相同的变量名,请不要忘记 inplace=True(这将执行就地操作)

df.sort_values(by=['2'], inplace=True)

不妨将更改(排序)分配给一个变量,该变量可能具有相同的名称,例如 df as

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

忘记上述步骤可能会导致(如this user)无法获得预期结果。

注意如果要降序,需要传ascending=False,如

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

答案 5 :(得分:2)

这是根据熊猫文档的sort_values模板。

f

在这种情况下,会是这样。

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)[source]

API参考pandas.DataFrame.sort_values

答案 6 :(得分:0)

作为另一种解决方案:

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

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)

这将为您提供创建Categorical对象时按月份名称排序的数据。

答案 7 :(得分:0)

这对我有用

df.sort_values(by='Column_name', inplace=True, ascending=False)

答案 8 :(得分:0)

这个对我有用:

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

鉴于:

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

不工作。

答案 9 :(得分:-1)

示例: 假设您有一列值为 1 和 0,并且您想分开并仅使用一个值,则:

//家具是csv文件中的一列。

allrooms = data.groupby('furniture')['furniture'].agg('count') 所有房间

myrooms1 = pan.DataFrame(allrooms, columns = ['furniture'], index = [1])

myrooms2 = pan.DataFrame(allrooms, columns = ['furniture'], index = [0])

打印(myrooms1);打印(myrooms2)