我正在寻找一种解决方案,可以比较3个连续数据行中的值,如果条件为真则更新列。
import pandas as pd aapl = pd.read_csv(....)
aapl['3lows'] = False
aapl.head(10)
并且输出是表格,其中每行都有
列Row number/ Date / Open / High / Low / Close / Adj Close / Volume / 3lows
0 / 2006-01-03 / 10.340000 / 10.678572 / 10.321428 / 10.678572 / 9.572629 / 201808600 / False
现在我想运行一些“脚本”来将列3low更新为true,如果正在更新的行中的列为Low的值,例如100低于99行,99低于98,98低于97.
答案 0 :(得分:1)
IIUC:
让我们使用这样的东西:
#where is is the s = appl['Low']; let's make up some data
s = pd.Series([100,99,98,97,99,100,99,95,94,93,92,100,95])
s.diff().rolling(3).max().lt(0)
返回:
0 False
1 False
2 False
3 True
4 False
5 False
6 False
7 False
8 True
9 True
10 True
11 False
12 False
dtype: bool
详细说明:
s
输出:
0 100
1 99
2 98
3 97
4 99
5 100
6 99
7 95
8 94
9 93
10 92
11 100
12 95
dtype: int64
使用diff
:
s.diff()
输出:
0 NaN
1 -1.0
2 -1.0
3 -1.0
4 2.0
5 1.0
6 -1.0
7 -4.0
8 -1.0
9 -1.0
10 -1.0
11 8.0
12 -5.0
dtype: float64
现在,让我们看看3个值的滚动窗口,如果max小于零,那么你的值有三个下降:
s.diff().rolling(3).max().lt(0)
输出:
0 False
1 False
2 False
3 True
4 False
5 False
6 False
7 False
8 True
9 True
10 True
11 False
12 False
dtype: bool
现在,让我们将结果与原始数据进行比较:
print(pd.concat([s,s.diff().rolling(3).max().lt(0)], axis=1))
0 1
0 100 False
1 99 False
2 98 False
3 97 True
4 99 False
5 100 False
6 99 False
7 95 False
8 94 True
9 93 True
10 92 True
11 100 False
12 95 False