采用以下多索引数据帧:
index_1 index_2 cum_value
0 2020-01 100.00
0 2020-02 50.00
0 2020-03 -50.00
0 2020-04 150.00
0 2020-05 200.00
1 2020-01 25.00
1 2020-02 50.00
1 2020-03 -100.00
1 2020-04 50.00
1 2020-05 200.00
我需要创建一个new_col
来计算每个index_1
的最后一个cum_value
的差值,如果考虑到index_1
内过去的最大值,这个cum_value
在上个月增加了
结果应该是这样的:
index_1 index_2 cum_value new_col
0 2020-01 100.00 100.00 --> first positive value on index_1 [0]
0 2020-02 50.00 0.00
0 2020-03 -50.00 0.00
0 2020-04 150.00 50.00 --> (150 - 100)
0 2020-05 200.00 50.00 --> (200 - 150)
1 2020-01 25.00 25.00 --> first positive value on index_1 [1]
1 2020-02 50.00 25.00 --> (50 - 25)
1 2020-03 -100.00 0.00
1 2020-04 50.00 0.00
1 2020-05 200.00 150.00 --> (200 - 50)
在new_col
上具有正值的第一行必须显示此值。我不需要负的最大值
这是计算边际价值以支付某些税款的基本原理
代码
解释
让我们
group
在level=0
上的数据帧,即index_1
并使用cummax
转换列cum_value
,以计算每个level=0
组的累积最大值:现在,将
cum_value
列与上面计算的累积最大值进行比较,以创建布尔掩码。注意,我们只考虑cum_value
中的正值。此布尔掩码背后的思想是,如果当前月份的值大于或等于前几个月的最大值,则此掩码的输出将为True
,否则False
因为我们只对满足上述条件的
cum_value
列中的值感兴趣,所以我们可以使用布尔屏蔽来过滤这些值现在
group
在level=0
上,即index_1
上,使用cum_value
列上的diff
来计算当前值和先前最大值之间的差异:最后,在新创建的
new_col
中填充NaN
值,并用不满足条件m
的0
屏蔽这些值:相关问题 更多 >
编程相关推荐