Python 熊猫的逻辑操作问题
我有以下代码:Python 熊猫的逻辑操作问题,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有以下代码: import pandas as pd from pandas import datetime from pandas import DataFrame as df from pandas_datareader import data as web import datetime import numpy as np stock = '^GSPC' start = datetime.date(2018,1,1) end = datetime.date.today() data
import pandas as pd
from pandas import datetime
from pandas import DataFrame as df
from pandas_datareader import data as web
import datetime
import numpy as np
stock = '^GSPC'
start = datetime.date(2018,1,1)
end = datetime.date.today()
data = web.DataReader(stock, 'yahoo',start, end)
这将产生以下结果:
High Low ... Volume Adj Close
Date ...
2018-01-02 2695.889893 2682.360107 ... 3367250000 2695.810059
2018-01-03 2714.370117 2697.770020 ... 3538660000 2713.060059
2018-01-04 2729.290039 2719.070068 ... 3695260000 2723.989990
2018-01-05 2743.449951 2727.919922 ... 3236620000 2743.149902
2018-01-08 2748.510010 2737.600098 ... 3242650000 2747.709961
... ... ... ... ...
2020-04-08 2760.750000 2663.300049 ... 5856370000 2749.979980
2020-04-09 2818.570068 2762.360107 ... 7880140000 2789.820068
2020-04-13 2782.459961 2721.169922 ... 5274310000 2761.629883
2020-04-14 2851.850098 2805.100098 ... 5567400000 2846.060059
2020-04-15 2801.879883 2761.540039 ... 5203390000 2783.360107
[575 rows x 6 columns]
我们有以下布尔逻辑:
(data['Close'].shift(2) < data['Open'].shift(1)) & (data['Close'].shift(1) > data['Open'].shift(2))
这是不对的,它应该像图片一样。我确信布尔逻辑有问题。如果您能提供我所使用的逻辑方面的帮助,我将不胜感激
我希望输出为一个系列,如下所示:
2020-04-03 True
2020-04-06 False
2020-04-07 False
2020-04-08 False
2020-04-09 False
2020-04-13 False
2020-04-14 False
2020-04-15 False
dtype: bool
只需将条件更改为
(数据['Close'].shift(2)>数据['Open'].shift(1))&(数据['Close'].shift(1)>数据['Open'].shift(2))
。
以下是一个示例:
data['Closeshift2'] = data['Close'].shift(2)
data['OpenShift1'] = data['Open'].shift(1)
data['CloseShift1'] = data['Close'].shift(1)
data['OpenShift2'] = data['Open'].shift(2)
data['Bool'] = (data['Closeshift2'] > data['OpenShift1']) & (data['CloseShift1'] > data['OpenShift2'])
data[-11:-8]
其结果是:
High Low Open Close Volume Adj Close Closeshift2 OpenShift1 CloseShift1 OpenShift2 Bool
Date
2020-04-01 2522.750000 2447.489990 2498.080078 2470.500000 5947900000 2470.500000 2626.649902 2614.689941 2584.590088 2558.979980 True
2020-04-02 2533.219971 2455.790039 2458.540039 2526.899902 6454990000 2526.899902 2584.590088 2498.080078 2470.500000 2614.689941 False
2020-04-03 2538.179932 2459.959961 2514.919922 2488.649902 6087190000 2488.649902 2470.500000 2458.540039 2526.899902 2498.080078 True
这是您在图片中显示的结果请举例说明您所期望的输出。我已更新了问题。请重新检查您的执行情况,因为我运行了您的代码并获得了准确的输出。我的pandas_datareader版本是0.8.1为什么今天是
shift(1)
,昨天是shift(2)
,是不是今天是shift(0)
,昨天是shift(1)
?你的代码与你的陈述相矛盾。您的代码:(data['Close'].shift(2)data['Open'].shift(2))
与您的陈述:昨天的收盘>今天的收盘>昨天的收盘>今天的收盘>昨天的收盘-->输出是正确的感谢您详细而有用的回答,这正是我想要的!
High Low Open Close Volume Adj Close Closeshift2 OpenShift1 CloseShift1 OpenShift2 Bool
Date
2020-04-01 2522.750000 2447.489990 2498.080078 2470.500000 5947900000 2470.500000 2626.649902 2614.689941 2584.590088 2558.979980 True
2020-04-02 2533.219971 2455.790039 2458.540039 2526.899902 6454990000 2526.899902 2584.590088 2498.080078 2470.500000 2614.689941 False
2020-04-03 2538.179932 2459.959961 2514.919922 2488.649902 6087190000 2488.649902 2470.500000 2458.540039 2526.899902 2498.080078 True