python - 如何根据条件迭代行和行组的百分比权重

标签 python pandas

我有一个如下所示的数据框。

我唯一没有的是“重量百分比”。我需要它从各自的总金额中获取每笔返回的权重(以立即进行的总金额为准)。

结构不一致。有时,某个帐户特定月份的总计可能有 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

关于python - 如何根据条件迭代行和行组的百分比权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58174168/

相关文章:

python - 您可以在 Python 的 ConfigParser 上使用部分默认值而不是实例吗?

python - 更改一个 df 中的列值以匹配不同 df 中的列值?

python - 来自包含 NaN 值的数据的 Pandas 数据框列

python - Pygame 创建键盘动画

python - cv2.VideoWriter 不会使用 fourcc h.264 写入文件(使用 logitech c920、python 2.7、windows 8)

Python 等同于 C 编程技术(while 循环)

python - 如何在python中读取合并的excel列?

Python 在分隔符上分割字符串,但不在此类分隔符的某些变体上分割字符串

r - 使用首先处理的年份创建新变量

python - Pandas:使用另一个数据帧中的重复行更新多个数据帧列