查询 pandas DataFrame 后,我想在查询中获取所选索引之前的 3 个条目。
下面的代码有效,但我认为它很脏而且效率不高,我只能想象有一种更好的方法可以用 Pandas 来做这件事。
有人可以帮助我吗?
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
我的另一个问题是,如果可以在查询中使用“shift”和“Pandas Language”,而不是使用 Python。
谢谢您的帮助!