Python 如何将函数应用于依赖于多个列的groupby子组?
获取以下数据帧和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=
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