Python 将pandas中groupby语句中的两列相乘
我有一个简化的数据帧,叫做dfPython 将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']) 基本
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
。