我有两个包含时间列和值列的数据框,df1
和df2
。 df1
形状为[30000000 x 20]
,df2
形状为[400 x 20]
。我需要在df1
中创建一个新列,其中包含来自df2
中距离最近的行df2
的值。这就是我的做法:
df2= df2.sort_values(by='time_col').reset_index(drop=True)
df1['closest'] = np.searchsorted(df2['time_col'].values, df1['time_col'].values)
df1['new_values'] = [df2.loc[x, 'value_col'] for x in sales['closest']]
这有效,但需要很长时间。对于一个3000万行的数据框,需要几个小时。
有更有效的方法吗?
答案 0 :(得分:1)
伙计,只需使用Pandas 19.0
和新的惊人merge as_of
时间序列
http://pandas.pydata.org/pandas-docs/stable/merging.html#merging-asof