Python 将批聚合到新数据帧
对不起,如果这是重复的。我搜索了很多,但也许我太笨了,看不到其他问题/答案的答案 我有股票行情数据。勾选数据如下所示:Python 将批聚合到新数据帧,python,pandas,Python,Pandas,对不起,如果这是重复的。我搜索了很多,但也许我太笨了,看不到其他问题/答案的答案 我有股票行情数据。勾选数据如下所示: Bid Ask Price Volume 0 12325.0 12335.0 12335.0 1 1 12330.5 12335.5 12335.5 1 2 12337.5 12340.0 12340.0 1 Open Close High Low Volume 0 NaN 12335.5 12335.5
Bid Ask Price Volume
0 12325.0 12335.0 12335.0 1
1 12330.5 12335.5 12335.5 1
2 12337.5 12340.0 12340.0 1
Open Close High Low Volume
0 NaN 12335.5 12335.5 12335.0 2.0
1 12330.5 12340.0 12340.0 12340.0 1.0
代码:
df_tick = pd.DataFrame({
'Bid': [12325.0, 12330.5,12337.5],
'Ask': [12335.0, 12335.5,12340.0],
'Price': [12335.0, 12335.5, 12340.0],
'Volume' : [1,1,1]
})
我正在尝试编写一个聚合器,它将n个滴答声聚合到蜡烛数据中。蜡烛数据如下所示:
Bid Ask Price Volume
0 12325.0 12335.0 12335.0 1
1 12330.5 12335.5 12335.5 1
2 12337.5 12340.0 12340.0 1
Open Close High Low Volume
0 NaN 12335.5 12335.5 12335.0 2.0
1 12330.5 12340.0 12340.0 12340.0 1.0
在哪里
打开:上一批的最后价格
关闭:当前批次的最后价格
高:当前批次的最大值
低值:当前批次的最小值
体积:当前批次的所有体积之和
我所做的是:
def aggregate_to_candles(data, step):
df = pd.DataFrame(columns=['Open', 'Close', 'High', 'Low'])
for i in range(0, len(data), step):
window = data.iloc[i: i + step]
previous_close = data.iloc[i-1: i, 2].values[0] if i > 0 else np.nan
df = df.append({
'Open' : previous_close,
'Close': window.tail(1)['Price'].values[0],
'High': window['Price'].max(),
'Low': window['Price'].min(),
'Volume': window['Volume'].sum()
}, ignore_index=True)
return df
调用aggregate\u to\u candles(df\u tick,2)
将给出如上所示的聚合结果。这似乎是正确的
这样做吗?有更好/更快/更容易的方法吗?对于我来说,将500万个滴答声聚合成150个批次需要相当长的时间。
我试着用滚动窗口来做,但我认为代码不值得在这里显示。IIUC,让我们试试
groupby
+agg
dct = {'Close': ('Price', 'last'), 'High': ('Price', 'max'),
'Low': ('Price', 'min'), 'Volumne': ('Volume', 'sum')}
N = 2 # Aggregate on 2 second interval
candles = df_tick.groupby(df_tick.index // N).agg(**dct)
candles['Open'] = candles['Close'].shift() # last price of previous batch
我喜欢你有趣的话,魔术师:-)太快了!!结果看起来是正确的!我试着去了解发生了什么。.agg(**dct)在做什么?它以某种方式调用字典中定义的函数。你知道我在哪里可以找到这方面的参考资料吗?@SvenBardos很高兴我能帮上忙
agg(**dct)
用于聚合字典中定义的列及其相应的聚合函数。例如,Price
列使用max
进行聚合,结果存储在新创建的列High
中,以获得当前批次的最大值。作为参考,你可以查一下