python pandas 中的 Mumbojumbo .rolling() .max() .groupby() 组合

Mumbojumbo .rolling() .max() .groupby() combination in python pandas

我希望对 B 列“groupedby”日期(A 列值)进行“滚动”.max() .min()。但是,诀窍是它应该再次从每一行开始,所以我不能使用例如 df['MAX'] = df['B'].rolling(10).max().shift(- 9)(因为我需要在组结束的地方结束它——每个组可以有不同的行数)或者简单地按 A 列分组(因为我需要滚动最大最小值,在每一行开始并在每个组结束的地方结束——这意味着第1行C列是B列第1-4行的最大值,对于第2行C列是B列第2-4行的最大值,对于第3行C列是B列第3-4行的最大值,对于第4行C 列是 B 列第 4 行的最大值,等等。)。希望它有意义 - C 列和 D 列是所需的结果。提前谢谢大家。

     A              B        C(max)   D(min)
1   2016-01-01      0        7        0     
2   2016-01-01      7        7        3
3   2016-01-01      3        4        3
4   2016-01-01      4        4        4  
5   2016-01-02      2        5        1
6   2016-01-02      5        5        1
7   2016-01-02      1        1        1         
8   2016-01-03      1        4        1
9   2016-01-03      3        4        2
10  2016-01-03      4        4        2
11  2016-01-03      2        2        2
df['C_max'] = df.groupby('A')['B'].transform(lambda x: x[::-1].cummax()[::-1])
df['D_min'] = df.groupby('A')['B'].transform(lambda x: x[::-1].cummin()[::-1])

            A  B  C(max)  D(min)  C_max  D_min
1   2016-01-01  0       7       0      7      0
2   2016-01-01  7       7       3      7      3
3   2016-01-01  3       4       3      4      3
4   2016-01-01  4       4       4      4      4
5   2016-01-02  2       5       1      5      1
6   2016-01-02  5       5       1      5      1
7   2016-01-02  1       1       1      1      1
8   2016-01-03  1       4       1      4      1
9   2016-01-03  3       4       2      4      2
10  2016-01-03  4       4       2      4      2
11  2016-01-03  2       2       2      2      2