我有以下数据框:
data = {
'CH': [0,1,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1],
'Z': [10, 11, 10, 12, 13, 10, 11, 12, 13, 14, 11, 13, 10, 11, 12, 13, 14, 14, 14],
'Res': [23, 43, 21, 23, 43, 9, 21, 13, 23, 43, 31, 27, 31, 33, 54, 17, 19, 23, 33]
}
df = pd.DataFrame(data)
如果我做df.groupby(['CH', 'Z']).mean()
,则会得到以下信息:
我希望能够按Z
列的降序对值进行排序。
我也想按Res
列中的值对值进行排序,但第一个是最重要的。
谢谢。
答案 0 :(得分:1)
首先按“ Z”排序,然后按“ Res”排序
dfs = df.groupby(['CH', 'Z']) \
.mean() \
.reset_index() \
.sort_values(['Z', 'Res'], ascending=False)
如果有必要保留类似于groupby结果的多索引:
dfs.set_index(['CH', 'Z'])
答案 1 :(得分:0)
您可以使用pandas.DataFrame.sort_values
,因为pandas.DataFrame.sort
是deprecated。
df.groupby(['CH', 'Z']).mean().sort_values(by='Z', ascending=False)
如果要按Res
进行排序,只需更改传递给by
参数的值
df.groupby(['CH', 'Z']).mean().sort_values(by='Res')
答案 2 :(得分:0)
您还可以在groupby语句中调用sort_index
,这将保留索引并对其进行排序,而不必使用set_index()
:
df_res=df.groupby(['CH', 'Z']).mean().sort_values('Res',ascending=False).sort_index(level=1,ascending=False)
print(df_res)
Res
CH Z
1 14 33.00
0 14 28.33
1 13 23.00
0 13 29.00
1 12 38.50
0 12 13.00
1 11 38.00
0 11 26.00
1 10 31.00
0 10 17.67
答案 3 :(得分:0)
我希望能够按
Z
列对值进行排序...然后 由Res
。
清除一些术语:Z
是索引级别,而Res
是系列。熊猫通过sort_values
帮助隐藏了这种区别。只需指定ascending
参数即可与您希望排序的组件对齐:
res = df.groupby(['CH', 'Z']).mean()\
.sort_values(['Z', 'Res'], ascending=[False, True])
print(res)
Res
CH Z
0 14 28.333333
1 14 33.000000
13 23.000000
0 13 29.000000
12 13.000000
1 12 38.500000
0 11 26.000000
1 11 38.000000
0 10 17.666667
1 10 31.000000