Python DataFrame.apply的速度很慢

Python DataFrame.apply的速度很慢,python,indexing,pandas,Python,Indexing,Pandas,我有一个包含timeseries数据的多索引数据帧['timestamp','symbol']。我将此数据与其他示例合并,使用asof的apply函数类似于: df.apply(lambda x: df2.xs(x['symbol'], level='symbol').index.asof(x['timestamp'])), axis=1) 我认为在symbol上过滤的实际xs是导致它如此缓慢的原因,因此我创建了一个'symbol'->df的dict,其中的值已经被过滤,因此我可以直接调用in

我有一个包含timeseries数据的多索引数据帧['timestamp','symbol']。我将此数据与其他示例合并,使用asof的apply函数类似于:

df.apply(lambda x: df2.xs(x['symbol'], level='symbol').index.asof(x['timestamp'])), axis=1)
我认为在symbol上过滤的实际xs是导致它如此缓慢的原因,因此我创建了一个'symbol'->df的dict,其中的值已经被过滤,因此我可以直接调用index.asof。我是不是走错了路

例如:

df = pd.read_csv(StringIO("ts,symbol,bid,ask\n2014-03-03T09:30:00,A,54.00,55.00\n2014-03-03T09:30:05,B,34.00,35.00"), parse_dates='ts', index_col=['ts', 'symbol'])
df2 = pd.read_csv(StringIO("ts,eventId,symbol\n2014-03-03T09:32:00,1,A\n2014-03-03T09:33:05,2,B"), parse_dates='ts', index_col=['ts', 'symbol'])

# find ts to join with and use xs so we can use indexof
df2['event_ts'] = df2.apply(lambda x: df.xs(x['symbol'], level='symbol').index.asof(x['ts'])), axis=1)
# merge in fields 
df2 = pd.merge(df2, df, left_on=['event_ts', 'symbol'], right_index=True)

是,请改用合并和矢量化操作。您正在python空间中执行O(n2)操作,每次都搜索整个行集。@Jeff抱歉,我不懂。你能提供一个例子吗?你必须提供你的输入/输出和code@Jeff我加了一个例子,我希望它是清楚的。基本上,我会找到合适的时间戳,并首先将该列分配给目标表,然后对其进行合并。也许有更好的办法?我不知道你来这里干什么。看起来您可能只是想在两个间隔上重新采样到普通时间,然后加入,这似乎更容易。