按Groupby中使用的第二列对值进行排序

2024-04-19 11:23:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧:

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(),我会得到以下结果:

Pandas groupby

我希望能够按Z列降序对值进行排序。你知道吗

我还想按Res列中的值对值进行排序,但第一个是最重要的。你知道吗

谢谢你。你知道吗


Tags: 数据dataframedfdata排序reschmean
3条回答

I would like to be able to sort the values by the Z column... then by Res.

为了澄清一些术语:Z是一个索引级别,而Res是一个系列。熊猫,通过^{},有助于隐藏这种区别。只需指定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

您可以使用pandas.DataFrame.sort_values,因为pandas.DataFrame.sortdeprecated。你知道吗

df.groupby(['CH', 'Z']).mean().sort_values(by='Z', ascending=False)

如果要按Res排序,只需更改传递给by参数的值

df.groupby(['CH', 'Z']).mean().sort_values(by='Res')

它先按“Z”排序,然后按“Res”排序

dfs = df.groupby(['CH', 'Z']) \
          .mean() \
          .reset_index() \
          .sort_values(['Z', 'Res'], ascending=False)

如果需要保留与groupby结果类似的多索引:

dfs.set_index(['CH', 'Z'])

相关问题 更多 >