Python 熊猫在多个分组级别中排名

Python 熊猫在多个分组级别中排名,python,pandas,group-by,Python,Pandas,Group By,我试图在基于聚合值的groupby多索引数据帧的多个级别内进行排序。想知道我在说什么: 我有一个分层数据集,然后在多个级别上分组。然后,我对它们进行聚合和求和。然后,我想把它们放在一起 在0级,值应根据所述度量值的总和按降序排列。然后,在级别1中,应根据所述度量值和级别2的总和,再次按降序排列值 分组后,我如何在每个级别进行排序 我知道不举一个例子很难,但如果我能被指向正确的方向那就太好了,谢谢 编辑: 原始数据: pd.DataFrame(data=[['a','car',6], ['a','

我试图在基于聚合值的groupby多索引数据帧的多个级别内进行排序。想知道我在说什么:

我有一个分层数据集,然后在多个级别上分组。然后,我对它们进行聚合和求和。然后,我想把它们放在一起

在0级,值应根据所述度量值的总和按降序排列。然后,在级别1中,应根据所述度量值和级别2的总和,再次按降序排列值

分组后,我如何在每个级别进行排序

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

编辑: 原始数据:

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'])
分组人:

df.groupby(['a','b']).agg({'c':'sum'})
重置索引后的期望输出:

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

更新的答案

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

步骤1

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

step1 = df.iloc[df.groupby('Col1').transform(sum).sort_values('Col3', ascending=False).index]
其中:

   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

现在,我们可以简单地按
Col1
Col2
分组,使用
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

请发布一个数据帧和所需的输出,换句话说,a我添加了一个示例,我想在每个列排序a b请将数据帧发布为文本,并包括一个所需的输出添加了数据帧的文本不确定如何复制它们印加你向我解释你是如何得到
['b','car',14]
?您将
groupby(['a','b'])
然后
agg({'c':'sum'})
仅通过排序方法分离这些值是没有意义的。14的值是通过8和6中的一些产生的,这是与
a
car
相关的值,而不是
b
。这不是他想要的输出。我希望“b”在“a”之前,因为总和更大。您在这里指的是哪个总和?你能解释一下在我的答案中使用输出吗?我会相应地修改。在我的编辑中,我包含了我想要的输出。在这种情况下,“c”的和。按我的“a”列分组,“b”的值之和大于“a”的值之和,因此“b”值应排在第一位。我已更新了我的答案,感谢您澄清您的要求。
   Col1  Col2  Col3
0    b  bike    20
1    b   car    10
2    a   car    14
3    a  bike     7