Pandas - 由“loc”

时间:2017-08-01 19:40:31

标签: python pandas dataframe

您好,并提前感谢任何提示或建议。

我有一个看起来像这样的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)

我对如何实现它有任何想法?

1 个答案:

答案 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