我有以下表格作为 df。
Price Stop Max Min
15 15
5
35
85
67 67
75
54
17
75 75
52
75
75 75
53
15 15
58
71
95
45
77 77
65
25
48
15 15
45
在针对止损值的最大列中,我希望在直到下一个止损值的范围内获得价格的最大值,并且对于最小列中的最小值也具有相同的值。 例如。针对 15,我需要 15 到 67 范围内的最大值和最小值。即相应列中的最大值为 85,最小值为 5。
我可以获得整个列的最小值和最大值,但不能获得连续变化的范围。
IIUC,计算掩码,然后执行
groupby.agg
并分配:
m = df['Stop'].notna()
df.loc[m, ['Max', 'Min']] = (df.groupby(m.cumsum())['Price']
.agg(['max', 'min']).values
)
输出:
Price Stop Max Min
0 15 15.0 85.0 5.0
1 5 NaN NaN NaN
2 35 NaN NaN NaN
3 85 NaN NaN NaN
4 67 67.0 75.0 17.0
5 75 NaN NaN NaN
6 54 NaN NaN NaN
7 17 NaN NaN NaN
8 75 75.0 75.0 52.0
9 52 NaN NaN NaN
10 75 NaN NaN NaN
11 75 75.0 75.0 53.0
12 53 NaN NaN NaN
13 15 15.0 95.0 15.0
14 58 NaN NaN NaN
15 71 NaN NaN NaN
16 95 NaN NaN NaN
17 45 NaN NaN NaN
18 77 77.0 77.0 25.0
19 65 NaN NaN NaN
20 25 NaN NaN NaN
21 48 NaN NaN NaN
22 15 15.0 45.0 15.0
23 45 NaN NaN NaN