更新:如何比较pandas数据帧中连续3行的值?

时间:2018-02-20 13:19:56

标签: python pandas

我正在寻找一种解决方案,可以比较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.

1 个答案:

答案 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