pandas DataFrame をクエリした後、クエリで選択したインデックスの前に 3 つのエントリを取得したいと考えています。
以下のコードは機能しますが、ダーティで効率的ではないと思います。パンダでそれを行うより良い方法があるとしか思えません。
誰かが私を助けることができますか?
import pandas as pd
import numpy as np
dates = pd.date_range('1/1/2015', periods=50)
df = pd.DataFrame(np.random.randn(50, 4), index=dates, columns=['A', 'B', 'C', 'D'])
x = (df['B'] > df['A']) & \
((df['B'].shift(+1) > df['A'].shift(+1)) == False) & \
(df['B'].shift(+2) > df['A'].shift(+2)) & \
(df['C'] < df['C'].shift(+2)) & \
(df['D'] < df['D'].shift(+1))
for d in df[x].index.values:
idx = df.index.get_loc(d)
print df.iloc[idx - 3:idx]
上記のコードのサンプル出力:
A B C D
2015-01-02 -0.600371 -1.088227 -1.213046 -0.000058
2015-01-03 -2.373683 -0.455126 -0.852127 0.311744
2015-01-04 0.240301 -1.957885 0.184642 0.690865
A B C D
2015-01-05 -0.833244 -0.787022 -1.490983 -0.540114
2015-01-06 0.569680 1.798457 1.253075 0.835848
2015-01-07 -0.245731 -0.365678 1.452985 2.007146
Process finished with exit code 0
私が持っているもう1つの質問は、Pythonを使用する代わりに、クエリ内で「Pandas Language」で「shift」を使用できるかどうかです。
助けてくれてありがとう!