我有python的经验,但我是大熊猫的新手,经过一整天努力做到这一点我无法解决它,我尝试了很多不同的方法,但任何人都为我工作。 我有一个这样的数据库:
open low high close volume interest
2008-08-05 10:00:00 22.53 22.12 22.53 22.14 186 186
2008-08-05 11:00:00 22.20 22.05 22.11 22.10 584 398
2008-08-05 12:00:00 22.19 22.04 22.08 22.15 848 264
2008-08-05 13:00:00 22.20 22.06 22.13 22.13 928 80
2008-08-05 14:00:00 22.19 22.03 22.13 22.08 988 60
2008-08-05 15:00:00 22.37 21.72 22.20 21.77 1418 430
2008-08-05 16:00:00 21.80 21.47 21.77 21.47 1666 248
2008-08-05 17:00:00 21.50 21.37 21.43 21.40 1865 199
.....
我试图在index.hour == 17的close列和index.hour == 6的close列之间进行减法,每天。
如果我尝试这样的话:
df[df.index.hour==17].close.sub(df[df.index.hour==6].open)
结果是NaN,如果我尝试制作一个新的DataFrame,结果也是Nan。 我怎么能这样做?也许我不太了解大熊猫,并没有那么容易做到这一点,我需要制作一个完整的脚本?感谢
答案 0 :(得分:1)
这可能不是最优雅的方式,但让我们看看:
In [54]:
#changed your first observation to 6:00
print df
open low high close volume interest
2008-08-05 06:00:00 22.53 22.12 22.53 22.14 186 186
2008-08-05 11:00:00 22.20 22.05 22.11 22.10 584 398
2008-08-05 12:00:00 22.19 22.04 22.08 22.15 848 264
2008-08-05 13:00:00 22.20 22.06 22.13 22.13 928 80
2008-08-05 14:00:00 22.19 22.03 22.13 22.08 988 60
2008-08-05 15:00:00 22.37 21.72 22.20 21.77 1418 430
2008-08-05 16:00:00 21.80 21.47 21.77 21.47 1666 248
2008-08-05 17:00:00 21.50 21.37 21.43 21.40 1865 199
In [55]:
df[np.in1d(df.index.hour, [6, 17])].groupby(pd.TimeGrouper(freq='24h')).close.agg(lambda x: x[-1]-x[0])
Out[55]:
2008-08-05 0.74
Freq: 24H, Name: close, dtype: float64
这个想法是首先对数据帧进行切片,使其仅包含6和17 o时钟数据。然后我们分组一天,并计算每天17到6点钟收盘价 FOR 之间的差异。
如果您对最后一次收盘和第一次开盘之间的差异感兴趣:
In [96]:
grp = df.ix[np.in1d(df.index.hour, [6, 17]),
['open','close']].groupby(pd.TimeGrouper(freq='24h'))
grp.close.last()-grp.open.last()
Out[96]:
2008-08-05 -0.1
Freq: 24H, dtype: float64
答案 1 :(得分:1)
如果你的数据帧定义得很好(你不需要检查每天是否包含6点和17点的数据)你可以使用pandas.DataFrame.diff并查询:
>>> df['hour'] = df.index.hour
>>> df.query('hour == 6 | hour == 17').diff()
open low high close volume interest hour
datetime
2008-08-05 06:00:00 NaN NaN NaN NaN NaN NaN NaN
2008-08-05 17:00:00 -1.03 -0.75 -1.1 -0.74 1679 13 11
>>> df.query('hour == 6 | hour == 17').diff(-1)
open low high close volume interest hour
datetime
2008-08-05 06:00:00 1.03 0.75 1.1 0.74 -1679 -13 -11
2008-08-05 17:00:00 NaN NaN NaN NaN NaN NaN NaN