Python 如何根据条件遍历行和行组的%权重
我有一个像这样的数据框 我唯一没有的就是重量的百分比。我需要它从其各自的总收益(以直接收益的总收益为准)中提取每个收益的权重 结构不一致。有时一个账户在一个特定月份可以有3个类别,有时可以有4个或5个类别 我需要遍历“每月MV列”,找到每个类别在其总月份中的权重 目前看起来是这样的:Python 如何根据条件遍历行和行组的%权重,python,pandas,Python,Pandas,我有一个像这样的数据框 我唯一没有的就是重量的百分比。我需要它从其各自的总收益(以直接收益的总收益为准)中提取每个收益的权重 结构不一致。有时一个账户在一个特定月份可以有3个类别,有时可以有4个或5个类别 我需要遍历“每月MV列”,找到每个类别在其总月份中的权重 目前看起来是这样的: Return Date Account Category Monthly MV 7/31/2003 abcdef BOND 1.00
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
应该是这样的:
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,您可以倒填
总计
行,然后简单划分:
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
请举例说明您的预期输出量
TOTAL
始终是每组中的最后一行?总是最后一行,是的