2017-08-01 63 views
1

您好,并提前感谢您的任何提示或建议。大熊猫 - 由“loc”索引的熊猫子集的标量操作

我有一个熊猫据帧“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

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 
+0

谢谢MaxU,这是为我工作。我正在尝试了解文档中“groupby”下的选项和可能性。 – MarkSpain

+0

@MarkSpain,欢迎您:) – MaxU