В выражении div
необходимо указать axis='index'
, и он должен получить искомый результат.
Так что ваш код выше должен выглядеть так:
newdfdd.update(newdfdd.loc[:,'binA':'binH'].div(newdfdd.loc[:,'binA':'binH'].sum(axis=1),
axis='index'))
Это вычислит ваш процент суммы строки по желанию, а затем обновит значения на месте в newfdd
фрейме данных.
Вот полное моё решение для ясности (я использовал df и случайные величины, но остальное то же самое):
df = pd.DataFrame({'bins':[0,1,2,3],
'year':[1998,1999,2000,2001],
'binA':np.random.randint(1,10,4),
'binB':np.random.randint(1,10,4),
'binC':np.random.randint(1,10,4),
'binD':np.random.randint(1,10,4),
'binE':np.random.randint(1,10,4),
'binF':np.random.randint(1,10,4),
'binG':np.random.randint(1,10,4),
'binH':np.random.randint(1,10,4)})
#reodering columns to match your dataframe layout
df = df[['bins','year','binA','binB','binC','binD','binE',
'binF','binG' ,'binH']]
df.update(df.loc[:,'binA':'binH'].div(df.loc[:,'binA':'binH'].sum(axis=1),axis='index'))
print(df)
bins year binA binB binC binD binE binF binG binH
0 0 1998 0.222222 0.037037 0.148148 0.185185 0.037037 0.111111 0.037037 0.222222
1 1 1999 0.264706 0.058824 0.205882 0.058824 0.029412 0.147059 0.176471 0.058824
2 2 2000 0.166667 0.041667 0.145833 0.020833 0.166667 0.166667 0.145833 0.145833
3 3 2001 0.062500 0.187500 0.020833 0.145833 0.083333 0.166667 0.166667 0.166667