Создание нового столбца панд из взвешенных значений в других столбцах - PullRequest
0 голосов
/ 07 марта 2019

Я пытаюсь создать новый столбец путем суммирования взвешенных значений в более ранних столбцах.

пример

 v1    v2   v3  
  1    2    3
  4    3    6
  3    2    1

weights = [0.801,0.796,0.637] 

Я бы хотел умножить v1 на весовые коэффициенты [0], затем v2 на весовые коэффициенты [1] и т. Д. И создать новый столбец, который будет суммой этих операций

так, чтобы вывод был

 v1       v2      v3    v_tot 
0.801   1.592   -1.911  0.482
3.204   2.388   -3.822  1.77
2.403   1.592   -0.637  3.358

Я пытался создать новый df

data2 = data3.mul(weights_a)

и это работает, но когда я пытаюсь создать новый столбец

data2['v_tot'] = data2.loc[:,:].sum()

новый столбец создан, но он полон значений nan.

Может кто-нибудь дать совет?

Ответы [ 3 ]

2 голосов
/ 07 марта 2019

(не уверен, почему в v3 есть отрицательные значения) try:

df_new=df.mul(weights,axis=1)
df_new['v_tot']=df_new.sum(axis=1)
print(df_new)

      v1     v2     v3  v_tot
0  0.801  1.592  1.911  4.304
1  3.204  2.388  3.822  9.414
2  2.403  1.592  0.637  4.632
1 голос
/ 07 марта 2019
s = """
 v1    v2   v3  
  1    2    3
  4    3    6
  3    2    1
"""
df = pd.read_csv(pd.compat.StringIO(s), delim_whitespace=True)

weights = [0.801,0.796,0.637]

df['v_tot'] = (df * weights).sum(axis=1)
df

Вывод:

   v1  v2  v3  v_tot
0   1   2   3  4.304
1   4   3   6  9.414
2   3   2   1  4.632

PS И если вы хотите иметь также DataFrame с взвешенными значениями:

dfw = df * weights
dfw['v_tot'] = dfw.sum(axis=1)
dfw

Вывод:

      v1     v2     v3  v_tot
0  0.801  1.592  1.911  4.304
1  3.204  2.388  3.822  9.414
2  2.403  1.592  0.637  4.632
0 голосов
/ 07 марта 2019

Попробуйте:

data2['v_tot'] = data2.sum(axis=1)
...