我有两个数据框,我希望连接在一起,左边的数据框有信息索引(日期,ID),右边的数据框有信息索引(句号,ID),其中句号是年 - 月。
我最后通过ID对左框架进行分组,通过组迭代,在右框架上选择相同的组,然后对左侧数据框中的组索引进行操作和asof操作,如下所示:
def merge_func(base_df, si_df):
df_list = list()
by_cusip = base_df.groupby('cusip8')
for cusip, group in by_cusip:
si_df_by_cusip = si_df[si_df.cusip==cusip]
if len( si_df_by_cusip[ pd.notnull(si_df_by_cusip['sif'])]) > 0:
group['sif'] = si_df_by_cusip['sif'].asof(group.index)
else:
group['sif'] = np.nan
if len( si_df_by_cusip[ pd.notnull(si_df_by_cusip['si_cover'])]) > 0:
group['sir'] = si_df_by_cusip['si_cover'].asof(group.index)
else:
group['sir'] = np.nan
df_list.append(group)
return pd.concat(df_list)
但是这个功能很慢。有没有人有办法让这个合并功能更快更有效?
您可能会发现这些链接与我要完成的内容相关:sample for doing asof-join,merging tables with millions of rows
提前感谢您的意见和帮助!
答案 0 :(得分:1)
您可以使用the "asof join" feature added to pandas 0.19:
pd.merge_asof(df1, df2, left_on='date', right_on='period', by='ID')