Как перебирать строки и% веса групп строк на основе условного - PullRequest
1 голос
/ 30 сентября 2019

У меня есть датафрейм, который выглядит следующим образом.

Единственное, чего у меня нет, это «% от веса». Мне нужно, чтобы он брал вес каждого возврата из его соответствующего итога (какой бы суммы он ни шел сразу же.

Структура не согласована. Иногда может быть 3 категории, которые суммируются для счета за определенный месяц, ииногда их может быть 4 или 5.

Мне нужно перебрать 'Ежемесячный столбец MV' и найти вес каждой категории для общего количества месяцев.

В настоящее время выглядит так:

Return Date    Account    Category    Monthly MV    
 7/31/2003      abcdef     BOND        1.00          
 7/31/2003      abcdef     CASH        0.50          
 7/31/2003      abcdef     EQUITY      1.50         
 7/31/2003      abcdef     TOTAL       3.00          
 8/30/2003      abcdef     ALT         1.00             
 8/30/2003      abcdef     BOND        1.00         
 8/30/2003      abcdef     CASH        0.25         
 8/30/2003      abcdef     EQUITY      2.50         
 8/30/2003      abcdef     REAL        0.25         
 8/30/2003      abcdef     TOTAL       5.00          

Это должно выглядеть так:

Return Date    Account    Category    Monthly MV    % of Weight
 7/31/2003      abcdef     BOND        1.00          0.33333
 7/31/2003      abcdef     CASH        0.50          0.1667
 7/31/2003      abcdef     EQUITY      1.50          0.5
 7/31/2003      abcdef     TOTAL       3.00          1.00
 8/30/2003      abcdef     ALT         1.00          0.20     
 8/30/2003      abcdef     BOND        1.00          0.20
 8/30/2003      abcdef     CASH        0.25          0.05
 8/30/2003      abcdef     EQUITY      2.50          0.5
 8/30/2003      abcdef     REAL        0.25          0.05
 8/30/2003      abcdef     TOTAL       5.00          1.00

1 Ответ

1 голос
/ 30 сентября 2019

IIUC, вы можете заполнить строки TOTAL и просто разделить:

df['% of Weight'] = df['Monthly MV'].div(df['Monthly MV']
                                         .where(df['Category'].eq('TOTAL'))
                                         .bfill()
                                        )

Вывод:

  Return Date Account Category  Monthly MV  % of Weight
0   7/31/2003  abcdef     BOND        1.00     0.333333
1   7/31/2003  abcdef     CASH        0.50     0.166667
2   7/31/2003  abcdef   EQUITY        1.50     0.500000
3   7/31/2003  abcdef    TOTAL        3.00     1.000000
4   8/30/2003  abcdef      ALT        1.00     0.200000
5   8/30/2003  abcdef     BOND        1.00     0.200000
6   8/30/2003  abcdef     CASH        0.25     0.050000
7   8/30/2003  abcdef   EQUITY        2.50     0.500000
8   8/30/2003  abcdef     REAL        0.25     0.050000
9   8/30/2003  abcdef    TOTAL        5.00     1.000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...