python - pandas 中涉及两列的聚合

标签 python pandas dataframe

假设我有一个具有以下结构的 pandas 数据框:

df = pd.DataFrame(dict(a=["x", "x", "y"], b=[0, 1, 1], c=[1, 2, 2]))

我想按 a 进行聚合分组,并进行依赖于 bc 的聚合。我想做一些类似的事情:

df.groupby("a").agg(lambda df: (df["b"] - df["c"]).sum())

但这会在 pandas 中引发以下错误:

KeyError: 'b'

在 pandas 中是否有一种简单的方法可以做到这一点?


我当然知道我可以做类似的事情

df.assign(new_b = lambda df: df["b"] - df["c"]).groupby("a").agg({"new_b": 'sum'})

给出以下结果:

   new_b
a
x     -2
y     -1

但必须有一个更简单的方法。

最佳答案

由于您的运算符是可交换的,因此您可以执行以下操作:

out = df.groupby('a').sum()
out['new_b'] = out['b'] - out['c']

输出:

   b  c  new_b
a             
x  1  3     -2
y  1  2     -1

注意:你已经很接近了,这会起作用

df.groupby("a").apply(lambda d: (d["b"] - d["c"]).sum())

区别在于 apply 将整个(子)数据帧作为参数,而 agg 将整个(子)数据帧的每一列作为参数。

关于python - pandas 中涉及两列的聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65996636/

相关文章:

python - 在 pandas 中打开文本文件时仅选择某些行

python - Pandas 数据帧滚动意味着有效

python - Dataframe 从列表中添加多列,并创建每个列名

python - 带单位的圆形 Sympy Mul

python - 在 QWidget (pyqt5) 上的 QPixmap 上绘制点

Python:每次函数运行时如何增加数字并存储在变量中

python - 在 Pandas Dataframe 中的特定列的其他值之间查找值

Pythonic 方式在日期后更改 2 列长数据框的内容

python - 在 Pandas 中将外部 json 与嵌套的 json 结合起来并创建新的数据框

python - 在同一 Pandas 数据框中交换行