2016-03-22 3 views
1

У меня есть файл данных pandas DataFrame, который индексируется по месяцам и содержит 1 и 0.Веса в панельных данных - Pandas

Для каждой даты (строки) я хотел бы суммировать строку, а затем разделить каждую точку данных на эту сумму, чтобы определить весовые коэффициенты с течением времени (если datapoint равен нулю, он должен оставаться равным нулю).

Мои данные выглядит следующим образом:

   A  B  C  D  
01-2001   1  1  0  1 
02-2001   1  0  0  1 
03-2001   1  0  0  1 
04-2001   1  1  1  1 
05-2001   1  1  1  0 

Вывод должен быть такой:

   A  B  C  D  
01-2001   0.33 0.33 0  0.33 
02-2001   0.5  0  0  0.5 
03-2001   0.5  0  0  0.5 
04-2001   0.25 0.25 0.25 0.25 
05-2001   0.33 0.33 0.33 0 

Может кто-нибудь помочь?

Спасибо!

ответ

0

Вы можете использовать div с sum:

print df.div(df.sum(axis=1), axis=0) 
       A   B   C   D 
01-2001 0.333333 0.333333 0.000000 0.333333 
02-2001 0.500000 0.000000 0.000000 0.500000 
03-2001 0.500000 0.000000 0.000000 0.500000 
04-2001 0.250000 0.250000 0.250000 0.250000 
05-2001 0.333333 0.333333 0.333333 0.000000 

И если вам нужно round:

print df.div(df.sum(axis=1), axis=0).round(2) 
      A  B  C  D 
01-2001 0.33 0.33 0.00 0.33 
02-2001 0.50 0.00 0.00 0.50 
03-2001 0.50 0.00 0.00 0.50 
04-2001 0.25 0.25 0.25 0.25 
05-2001 0.33 0.33 0.33 0.00 
Смежные вопросы