我有一个如下的数据帧。
Best Bid Best Offer Best Offer Sign Lone Time
0 197.0 0.0 1 1
1 198.0 0.0 1 2
2 199.0 0.0 1 3
3 197.0 221.0 0 0
4 221.0 221.0 0 0
5 221.0 0.0 1 1
6 222.0 0.0 1 2
我想制作每个情况的组,其中单独的时间是数字按递增顺序在它们达到0之前(它们将始终按递增顺序从不减少)并找到每组中最高和最低最佳出价值之间的差异。所以作为一个例子
Best Bid Best Offer Best Offer Sign Lone Time diff
0 197.0 0.0 1 1 0
1 198.0 0.0 1 2 0
2 200.0 0.0 1 3 3
3 197.0 221.0 0 0 0
4 221.0 221.0 0 0 0
5 221.0 0.0 1 1 0
6 250.0 0.0 1 2 29
这里,如果您注意到索引2和6分别具有3和39的值。对于指数2,我采用了(指数2 - 指数0)的最佳出价差异,对于指数6,我采用了(指数6 - 指数5)的最佳出价差异。我如何实现这一目标?
答案 0 :(得分:0)
我认为这会做你正在寻找的事情:
dat = pd.read_csv('dat.csv', sep=';')
dat['jump'] = (dat['Lone Time'].shift(-1) - dat['Lone Time']).fillna(-1)
dat['jump'] = map(int, (1-np.sign(dat['jump']))/2.)
dat['series'] = dat['jump'].shift(1).fillna(0).cumsum()
dat['diff'] = 0
for s, df in dat.groupby('series'):
dat.loc[df.index[-1], 'diff'] = (df['Best Bid'].max() - df['Best Bid'].min())
dat = dat.drop(['jump', 'series'], axis=1)
print dat
1)在Lone Time
2)标记系列中的最后一行,将其移动一个并用零填充缺失值
2.1)通过累积和来区分系列,每个序列现在都有自己的"标识符"
3)按系列分组,找出最小/最大值之间的跨度
4)清理:丢弃中间列