我有一个名为df的简化数据帧。
import pandas as pd
df = pd.DataFrame({'num': [1,1,2,2],
'price': [12,11,15,13],
'y': [7,7,9,9]})
我想用数字分组,然后乘以价格和y,然后取和除以y的和。
我一直在试着开始做这件事,但是遇到了麻烦
df.groupby('letter').agg(['price']*['quantity'])
发布于 2019-10-02 08:55:34
基本上你想要计算一个加权平均值
为此,一种方法是:
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})
发布于 2019-10-02 09:16:55
在groupby操作之前,您可以向计算中间结果(price * y
)的数据帧添加一个临时列,然后在groupby操作中使用该列(求和,然后使用eval
计算temp
除以y
的和)。将结果转换回一个dataframe,并将新列命名为任意名称。
>>> (df
.assign(temp=df.eval('price * y'))
.groupby('num')
.sum()
.eval('temp / y')
.to_frame('result')
)
result
num
1 11.5
2 14.0
https://stackoverflow.com/questions/58193884
复制相似问题