Python 按Groupby中使用的第二列对值进行排序
我有以下数据帧:Python 按Groupby中使用的第二列对值进行排序,python,pandas,Python,Pandas,我有以下数据帧: 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] }
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
列中的值对值进行排序,但第一个是最重要的
谢谢。首先按“Z”排序,然后按“Res”排序
dfs = df.groupby(['CH', 'Z']) \
.mean() \
.reset_index() \
.sort_values(['Z', 'Res'], ascending=False)
如果需要保留与groupby结果类似的多索引:
dfs.set_index(['CH', 'Z'])
您可以使用
pandas.DataFrame.sort\u值
,因为pandas.DataFrame.sort
是
如果要按Res
排序,只需更改传递给by
参数的值
df.groupby(['CH', 'Z']).mean().sort_values(by='Res')
您还可以在groupby语句中调用,该语句将保留索引并对其排序,而无需使用set\u index()
:
我希望能够按Z
列对值进行排序。。。然后
通过Res
为了澄清一些术语:Z
是一个索引级别,而Res
是一个系列。熊猫,via,有助于隐藏这种区别。只需指定升序
参数,以与您希望排序的组件对齐:
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
在您的示例中,
[![Pandas groupby][1]][1]
是什么?您想在groupby之后进行排序吗?图片没有显示,让我重新发布它,以便按降序对Z
的值进行排序df。排序值(按class='Z',升序=False)
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
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