我有一个数据框:
Group Importance
1 100%
1 100%
1 50%
2 75%
2 50%
我想标准化重要性,因此对于每个组,组合重要性等于100%(例如,每个单独的单元格除以特定组中其余数字的总和)
例如:
Group Importance Weight
1 100% 100%/Sum(100%+100%+50%) = 40%
1 100% 100%/Sum(100%+100%+50%) = 40%
1 50% 50%/Sum(100%+100%+50%) = 20%
因此,我正在努力获得我的输出:
Group Importance Weight
1 100% 40%
1 100% 40%
1 50% 20%
2 100% 60%
2 50% 40%
我的第一个想法是尝试在groupby中利用for循环的强大功能,但非常错误有点像:
for z in df.groupby(['Group']):
df.apply(lambda row: (row[1]/df['Importance'])
答案 0 :(得分:2)
假设数据框中的值是数字(例如.50 vs '50%'):
df['Weight'] = df.groupby('Group')['Importance'].transform(lambda x: x / sum(x))
>>> df
Group Importance Weight
0 1 1.00 0.4
1 1 1.00 0.4
2 1 0.50 0.2
3 2 0.75 0.6
4 2 0.50 0.4