Python 3.x Python Dataframe Panda-如果条件匹配,则计算加权和,并对结果进行分组
我想根据Python 3.x Python Dataframe Panda-如果条件匹配,则计算加权和,并对结果进行分组,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我想根据条件列上的条件计算加权和。 我有以下数据帧: 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
条件
列上的条件计算加权和。
我有以下数据帧:
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']当且仅当所有可能的权重
和相同的标准
值都有一行时,然后按标准
值对它们进行分组。剩下的将是NaN
在我的示例中,只有df['criteria']==2的行填充此条件
因此,我们将:
criteria weighted_sum
0 2 1.7
1 3 NaN
2 4 NaN
3 5 NaN
4 9 NaN
criteria weighted_sum
0 2 1.7
1 3 NaN
2 4 NaN
3 5 NaN
4 9 NaN
这个怎么写?非常感谢 您可以使用issubset
检查权重是否为组的子集,然后使用序列求和。其中
:
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'))