python - Pandas groupby 汇总

标签 python pandas

如果我有一个这样的数据框:

import pandas as pd
df=pd.DataFrame({"A":[1,1,2],"B":["a","b","c"],"metric":[4,5,2]})
df=df.groupby(["A","B"]).sum()

生成的 df 为:

     metric
A B        
1 a       4
  b       5
2 c       2

当然是多索引级别 A 和 B。

我如何将指标总和“汇总”到 A 级别,并将其应用于该级别的 df,以便我得到如下结果:

     metric   total_metric_by_A
A B        
1 a       4                   9
  b       5                   9
2 c       2                   2

我知道我可以重置索引,仅按 A 分组,然后以某种方式加入回来,但我真的不想这样做。有更好的办法吗?

最佳答案

groupby 还接受级别参数,因此您可以执行以下操作:

df.groupby(level='A').transform('sum')
Out: 
     metric
A B        
1 a       9
  b       9
2 c       2

当然,您需要将其分配回来

df['total_metric_by_A'] = df.groupby(level='A').transform('sum')

df
Out: 
     metric  total_metric_by_A
A B                           
1 a       4                  9
  b       5                  9
2 c       2                  2

关于python - Pandas groupby 汇总,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48345059/

相关文章:

python - SQLAlchemy:如何按两个字段分组并按日期过滤

python - 在 Django Rest Framework (2.3.5) 中序列化 ManyToMany 抛出 ValueError

python - 如何让pandas.DataFrame.rank从0开始?

python - 句子被标记为 pandas 中的单词,但索引从 0 到第一个句子的长度,第二个句子又从 0 开始

python - 保留列顺序 - Python Pandas 和列连接

python - 如何通过迭代批量数组来创建多维结果

python - 从 pandas DataFrame 创建差异矩阵

python - `AttributeError` 尝试连接数据框中的两列时

python - 为每组行按行迭代的最有效方法是什么?

python - Pandas `read_json` 函数将字符串转换为 DateTime 对象,即使指定了 `convert_dates=False` attr