Python Dataframe Panda -如果条件匹配则计算加权和并对结果进行分组

v7pvogib  于 2023-02-17  发布在  Python
关注(0)|答案(1)|浏览(143)

我想根据criteria列上的条件计算加权和。我有以下数据框架:

df = pd.DataFrame({'criteria': [2, 2, 2, 3, 4, 5, 5, 9], 
                   'weight': [1, 2, 3, 1, 2, 1, 2, 3], 
                   'value': [0.2, 0.6, 0.1, 0.9, 0.8, 0.7, 0.3, 0.8]})
print(df)

   criteria  weight  value
0         2       1    0.2
1         2       2    0.6
2         2       3    0.1
3         3       1    0.9
4         4       2    0.8
5         5       1    0.7
6         5       2    0.3
7         9       3    0.8

weight列的可能值为{1,2,3}。
我想计算加权和df['weight'] * df['value'],当且仅当所有可能的weights和相同的criteria值都有一行,然后按criteria值分组,剩下的就是NaN
在我的示例中,只有包含df['criteria'] == 2的行满足此条件。
因此,我们会:

criteria  weighted_sum
0         2           1.7
1         3           NaN
2         4           NaN
3         5           NaN
4         9           NaN

这个怎么写?非常感谢!

kmbjn2e3

kmbjn2e31#

您可以使用issubset检查权重是否是组的子集,然后使用series.where求和:

weights = [1,2,3]
cond = df.groupby('criteria')['weight'].agg(lambda x: set(weights).issubset(set(x)))
(df['weight'].mul(df['value']).groupby(df['criteria']).sum()
                     .where(cond).reset_index(name='weighted_sum'))
criteria  weighted_sum
0         2           1.7
1         3           NaN
2         4           NaN
3         5           NaN
4         9           NaN

相关问题