'熊猫在多个分组等级内的排名'

2024-04-26 14:14:01 发布

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

enter image description here我正在尝试根据聚合值在groupby多索引数据帧的多个级别中进行排序。想知道我在说什么:

我有一个分层的数据集,然后在多个级别上分组。然后我对它们进行汇总和计算。然后我想把它们放在彼此之间。在

在0级,值应该根据所述度量值的总和按降序排列。然后在级别1中,根据所述度量值的和、级别2等,对值进行降序排序。。在

在groupby之后,如何在每个级别进行排序?在

我知道不举一个例子很难,但如果我能被指向正确的方向那就太好了,谢谢

编辑: 原始数据:

pd.DataFrame(data=[['a','car',6], ['a','bike',7], ['a','car',8], ['b','bike',9], ['b','car',10], ['b','bike',11]], columns=['a', 'b', 'c'])

分组依据:

^{pr2}$

重置索引后的期望输出:

 pd.DataFrame(data=[['b','bike',20], ['b','car',10], ['a','car',14], ['a','bike',7]], columns=['a', 'b', 'c'])

Tags: columns数据dataframedata排序度量分层级别
1条回答
网友
1楼 · 发布于 2024-04-26 14:14:01

更新答案

我将分为多个步骤(请注意,为了清晰起见,我更改了您的列名,即df.columns=['Col1','Col2','Col3']):

   Col1  Col2  Col3
0    a   car     6
1    a  bike     7
2    a   car     8
3    b  bike     9
4    b   car    10
5    b  bike    11 

第1步

我们首先希望groupby('Col1')并使用transform(sum)根据与给定组相关联的Col3中的值的和来转换数据帧。这通过使用sort_values('Col3', ascending=False)存储结果索引并使用它来设置原始数据帧df的索引,来设置Col1的顺序。在

^{pr2}$

它给出了:

   Col1  Col2  Col3
3    b  bike     9
4    b   car    10
5    b  bike    11
0    a   car     6
1    a  bike     7
2    a   car     8 

第2步

现在我们可以简单地按Col1Col2分组,使用sort=False来保持步骤1中的排序顺序,并基于Col3的和进行聚合。使用reset_index()清理索引并还原原始列。在

step2 = step1.groupby(['Col1','Col2'], sort=False).agg({'Col3': 'sum'}).reset_index()

您想要的输出:

   Col1  Col2  Col3
0    b  bike    20
1    b   car    10
2    a   car    14
3    a  bike     7

相关问题 更多 >