Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据条件遍历行和行组的%权重_Python_Pandas - Fatal编程技术网

Python 如何根据条件遍历行和行组的%权重

Python 如何根据条件遍历行和行组的%权重,python,pandas,Python,Pandas,我有一个像这样的数据框 我唯一没有的就是重量的百分比。我需要它从其各自的总收益(以直接收益的总收益为准)中提取每个收益的权重 结构不一致。有时一个账户在一个特定月份可以有3个类别,有时可以有4个或5个类别 我需要遍历“每月MV列”,找到每个类别在其总月份中的权重 目前看起来是这样的: Return Date Account Category Monthly MV 7/31/2003 abcdef BOND 1.00

我有一个像这样的数据框

我唯一没有的就是重量的百分比。我需要它从其各自的总收益(以直接收益的总收益为准)中提取每个收益的权重

结构不一致。有时一个账户在一个特定月份可以有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
应该是这样的:

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
始终是每组中的最后一行?总是最后一行,是的