我有一个看起来像这样的数据框。
我唯一没有的就是“重量百分比”。我需要它从其各自的总和中取回每个收益的权重(以总和为准)。
结构不一致。有时可能会有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
最佳答案
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