Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.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 如何将函数应用于依赖于多个列的groupby子组?_Python_Pandas_Dataframe_Pandas Groupby - Fatal编程技术网

Python 如何将函数应用于依赖于多个列的groupby子组?

Python 如何将函数应用于依赖于多个列的groupby子组?,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,获取以下数据帧和groupby对象 df = pd.DataFrame([[1, 2, 3],[1, 4, 5],[2, 5, 6]], columns=['a', 'b', 'c']) print(df) a b c 0 1 2 3 1 1 4 5 2 2 5 6 dfGrouped = df.groupby(['a']) 如何应用于groupby对象dfGrouped,将b和c的每个元素相乘,然后求和。对于这个例子,1组的2*3+4*5=26,0组的5*6=

获取以下数据帧和groupby对象

df = pd.DataFrame([[1, 2, 3],[1, 4, 5],[2, 5, 6]], columns=['a', 'b', 'c'])

print(df)
   a  b  c
0  1  2  3
1  1  4  5
2  2  5  6

dfGrouped = df.groupby(['a'])
如何应用于groupby对象dfGrouped,将b和c的每个元素相乘,然后求和。对于这个例子,1组的2*3+4*5=26,0组的5*6=30

因此,我希望groupby对象的输出是:

   a  f
0  1  26
2  2  30

如果需要多个all列而不使用聚合和:

带有辅助列的替代项:

df = df.assign(f = df.drop('a', 1).prod(axis=1)).groupby("a", as_index=False).f.sum()
如果只需要多个列,一个想法是使用@sammywemmy解决方案:

df = df.assign(f = df.b.mul(df.c)).groupby("a", as_index=False).f.sum()
print (df)
   a   f
0  1  26
1  2  30
    

如果需要多个all列而不使用聚合和:

带有辅助列的替代项:

df = df.assign(f = df.drop('a', 1).prod(axis=1)).groupby("a", as_index=False).f.sum()
如果只需要多个列,一个想法是使用@sammywemmy解决方案:

df = df.assign(f = df.b.mul(df.c)).groupby("a", as_index=False).f.sum()
print (df)
   a   f
0  1  26
1  2  30
    
做:

输出

做:

输出

代码:

输出:

   a   f
0  1  26
1  2  30
代码:

输出:

   a   f
0  1  26
1  2  30

在通过groupby求和之前,您可能需要计算乘法,创建临时列。类似这样:df.assignf=df.b.muldf.c.groupbya,因为_index=False.f.sum在通过groupby求和之前,您可能需要计算乘法,创建临时列。类似这样:df.assignf=df.b.muldf.c.groupbya,as_index=False.f.sum
   a   f
0  1  26
1  2  30