您好,并提前感谢任何提示或建议。
我有一个看起来像这样的Panda DataFrame“df”:
Next Origin values
A3-S B3-M A3-S 6
A3-S D4-M B3-M 7
D4-M A4-M D4-M 6
A4-M A4-S A4-M 6
我希望将给定标签中所有行的列“值”中的所有值相加,然后将相同行中“值”中的每个值除以获得的总和 - 因此,值在0和1之间归一化为标签行。
使用:
sum = dataf.loc['A3-S','values'].sum()
我在标签“A3-S”的“值”列中有值的总和,如:
A3-S 6
A3-S 3
A3-S 1
A3-S 1
A3-S 1
A3-S 2
Total : 14
当我尝试通过总和来划分我感兴趣的块的每一行
dataf.loc['A3-S', 'values']= dataf.loc['A3-S','values'] / sum
我收到错误:
in _setitem_with_indexer
raise ValueError('Must have equal len keys and value '
ValueError: Must have equal len keys and value when setting with an iterable
我尝试过其他选项但没有成功,例如:
dataf.loc['A3-S', 'values'] = dataf.loc['A3-S', 'values'].apply(lambda x: x/sumat)
我对如何实现它有任何想法?
答案 0 :(得分:0)
IIUC:
In [23]: df['val_norm'] = df.groupby(level=0)['values'].transform(lambda x: x/x.sum())
In [24]: df
Out[24]:
Next Origin values val_norm
A3-S B3-M A3-S 6 0.461538
A3-S D4-M B3-M 7 0.538462
D4-M A4-M D4-M 6 1.000000
A4-M A4-S A4-M 6 1.000000