Python 包含两个列的聚合
假设我有一个具有以下结构的熊猫数据帧:Python 包含两个列的聚合,python,pandas,dataframe,Python,Pandas,Dataframe,假设我有一个具有以下结构的熊猫数据帧: df = pd.DataFrame(dict(a=["x", "x", "y"], b=[0, 1, 1], c=[1, 2, 2])) 我想通过a聚合分组,并根据b和c进行聚合。我想做一些类似的事情: df.groupby("a").agg(lambda df: (df["b"] - df["c"]).sum()) 但这在熊猫中引发
df = pd.DataFrame(dict(a=["x", "x", "y"], b=[0, 1, 1], c=[1, 2, 2]))
我想通过a
聚合分组,并根据b
和c
进行聚合。我想做一些类似的事情:
df.groupby("a").agg(lambda df: (df["b"] - df["c"]).sum())
但这在熊猫中引发了以下错误:
KeyError: 'b'
有没有一种简单的方法可以在熊猫身上做到这一点
我当然知道我可以做类似的事情
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
将整个(子)数据帧的每一列作为参数。使用上一个命令获得相同的结果