Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 包含两个列的聚合_Python_Pandas_Dataframe - Fatal编程技术网

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

使用上一个命令获得相同的结果