我有一个DataFrame,它看起来就像一个数字列表:
选项2南 南南南南南南
一种方法如下:
import pandas as pd
data = {'original': {0: 1, 1: -1, 2: 4, 3: -1, 4: 6, 5: 7, 6: 2, 7: 3, 8: 0}}
df = pd.DataFrame(data)
n = 3
df['option 1'] = (df['original'].rolling(n).sum()
.where(df['original'].shift(n).lt(0))
)
df['option 2'] = df['option 1'].shift(-n)
print(df)
original option 1 option 2
0 1 NaN NaN
1 -1 NaN 9.0
2 4 NaN NaN
3 -1 NaN 15.0
4 6 9.0 NaN
5 7 NaN NaN
6 2 15.0 NaN
7 3 NaN NaN
8 0 NaN NaN
- 首先,使用
Series.rolling
创建用于应用sum
的滚动窗口。 - 接下来,链接
Series.where
并将cond
参数设置为original
列移位(shift
)版本的值小于零(lt
)的求值。 - 对于
option 2
,我们只需在option 1
上应用负移位。