我有一个多索引数据帧。索引列是Date
和Symbol
。我想重置数据帧开始的行,为每个rolling_max
评估number
的Symbol
。我想基于包含True
或False
的列来执行此操作。如果condition
在True
上是Date
,那么rolling_max
应该重置并从这个Date
计算最大值。如果condition
是False
那么rolling_max
应该'正常'工作 - 取得今天的最大值和昨天的number
给定的Symbol
。 condition
列与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'
我怎样才能做到这一点?
我能够解决这个问题。
df['rolling_max'] = df.groupby(['Symbol',df.groupby('Symbol')['condition'].cumsum()])['number'].cummax()