Python 将pandas中groupby语句中的两列相乘

Python 将pandas中groupby语句中的两列相乘,python,pandas,Python,Pandas,我有一个简化的数据帧,叫做df import pandas as pd df = pd.DataFrame({'num': [1,1,2,2], 'price': [12,11,15,13], 'y': [7,7,9,9]}) 我想按num an分组,然后将price和y相乘,取和除以y的和 我一直在尝试开始做这件事,但遇到了麻烦 df.groupby('letter').agg(['price']*['quantity']) 基本

我有一个简化的数据帧,叫做df

import pandas as pd
df = pd.DataFrame({'num': [1,1,2,2],
               'price': [12,11,15,13],
               'y': [7,7,9,9]})
我想按num an分组,然后将price和y相乘,取和除以y的和

我一直在尝试开始做这件事,但遇到了麻烦

df.groupby('letter').agg(['price']*['quantity'])

基本上你要计算一个加权平均值

一种方法是:

import numpy as np
# define custom function with 'y'column as weights
weights = lambda x: np.average(x,weights=df.loc[x.index,'y'])
# aggregate using this new function
df.groupby('num').agg({'price': weights})

基本上你要计算一个加权平均值

一种方法是:

import numpy as np
# define custom function with 'y'column as weights
weights = lambda x: np.average(x,weights=df.loc[x.index,'y'])
# aggregate using this new function
df.groupby('num').agg({'price': weights})

在groupby操作之前,您可以在数据框中添加一个临时列来计算中间结果(
price*y
),然后在groupby操作中使用此列(求和值,然后使用
eval
计算
temp
之和除以
y
)。将结果强制转换回数据帧,并根据需要调用新列

>>> (df
     .assign(temp=df.eval('price * y'))
     .groupby('num')
     .sum()
     .eval('temp / y')
     .to_frame('result')
)
     result
num        
1      11.5
2      14.0

在groupby操作之前,您可以在数据框中添加一个临时列来计算中间结果(
price*y
),然后在groupby操作中使用此列(求和值,然后使用
eval
计算
temp
之和除以
y
)。将结果强制转换回数据帧,并根据需要调用新列

>>> (df
     .assign(temp=df.eval('price * y'))
     .groupby('num')
     .sum()
     .eval('temp / y')
     .to_frame('result')
)
     result
num        
1      11.5
2      14.0

g=df.groupby('num')
开始,然后使用
g
。从
g=df.groupby('num')
开始,然后使用
g