我有一个这样的数据框:
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)对应的月份数。从那里,我如何根据日历月的顺序对这个数据框进行排序?
使用 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']
中的每个值都是唯一的。
我尝试了上面的解决方案,但没有取得结果,所以我找到了一个适合我的不同解决方案。 ascending=False
是按降序 对数据帧进行排序,默认为 True
。我正在使用 python 3.6.6 和 pandas 0.23.4 版本。
final_df = df.sort_values(by=['2'], ascending=False)
您可以在 pandas 文档 here 中查看更多详细信息。
使用列名对我有用。
sorted_df = df.sort_values(by=['Column_name'], ascending=True)
就像另一个解决方案一样:
您可以对字符串数据(月份名称)进行分类并按如下方式排序,而不是创建第二列:
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
对象时指定的 month name
为您提供排序数据。
Panda 的 sort_values
完成了这项工作。
如果打算保留相同的变量名,请不要忘记 inplace=True
(这会就地执行操作)
df.sort_values(by=['2'], inplace=True)
不妨将更改(排序)分配给一个变量,该变量可能具有相同的名称,例如 df
为
df = df.sort_values(by=['2'])
忘记上述步骤可能会导致(如this user)无法获得预期的结果。
注意,如果要按降序排列,则需要通过ascending=False
,例如
df = df.sort_values(by=['2'], ascending=False)
只是在数据上添加更多操作。假设我们有一个数据框 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
这对我有用
df.sort_values(by='Column_name', inplace=True, ascending=False)
您可能需要在排序后重置索引:
df = df.sort_values('2')
df = df.reset_index(drop=True)
这是根据熊猫文档的 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
只需添加更多见解
df=raw_df['2'].sort_values() # will sort only one column (i.e 2)
但 ,
df =raw_df.sort_values(by=["2"] , ascending = False) # this will sort the whole df in decending order on the basis of the column "2"
这个对我有用:
df=df.sort_values(by=[2])
然而:
df=df.sort_values(by=['2'])
不管用。
示例:假设您有一个值为 1 和 0 的列,并且您想分离并只使用一个值,那么:
// furniture is one of the columns in the csv file.
allrooms = data.groupby('furniture')['furniture'].agg('count')
allrooms
myrooms1 = pan.DataFrame(allrooms, columns = ['furniture'], index = [1])
myrooms2 = pan.DataFrame(allrooms, columns = ['furniture'], index = [0])
print(myrooms1);print(myrooms2)