如何在pandas MultiIndex数据帧中有条件地重置滚动最大值的初始值/行?

问题描述 投票:0回答:1

我有一个多索引数据帧。索引列是DateSymbol。我想重置数据帧开始的行,为每个rolling_max评估numberSymbol。我想基于包含TrueFalse的列来执行此操作。如果conditionTrue上是Date,那么rolling_max应该重置并从这个Date计算最大值。如果conditionFalse那么rolling_max应该'正常'工作 - 取得今天的最大值和昨天的number给定的Symbolcondition列与number列无关(它们不相互依赖)。这是预期的输出:

                         number     condition     rolling_max
Date          Symbol     
1990-01-01    A          29         False         29
1990-01-01    B          7          False         7

1990-01-02    A          13         True          13 # Reset rolling max for 'A'
1990-01-02    B          2          False         7

1990-01-03    A          11         False         13
1990-01-03    B          52         True          52 # Reset rolling max for 'B'

1990-01-04    A          30         False         30
1990-01-04    B          1          False         52

1990-01-05    A          19         True          19 # Reset rolling max for 'A'
1990-01-05    B          65         False         65

1990-01-06    A          17         False         19
1990-01-06    B          20         True          20 # Reset rolling max for 'B'

我怎样才能做到这一点?

pandas conditional max multi-index
1个回答
0
投票

我能够解决这个问题。

df['rolling_max'] = df.groupby(['Symbol',df.groupby('Symbol')['condition'].cumsum()])['number'].cummax()
© www.soinside.com 2019 - 2024. All rights reserved.