涉及熊猫中两列的聚合

时间:2021-02-01 16:42:21

标签: 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

但必须有更简单的方法。

1 个答案:

答案 0 :(得分:2)

由于您的运算符是可交换的,您可以这样做:

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 将整个(子)数据帧的每一列作为参数。