根据标准对元素进行分组并查找组中最高和最低之间的差异

时间:2017-07-06 21:29:32

标签: python pandas numpy dataframe

我有一个如下的数据帧。

   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)的最佳出价差异。我如何实现这一目标?

1 个答案:

答案 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)清理:丢弃中间列