使用ID和asof合并两个数据帧

时间:2013-10-30 01:14:35

标签: python merge group-by pandas time-series

我有两个数据框,我希望连接在一起,左边的数据框有信息索引(日期,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-joinmerging tables with millions of rows

提前感谢您的意见和帮助!

1 个答案:

答案 0 :(得分:1)

您可以使用the "asof join" feature added to pandas 0.19

pd.merge_asof(df1, df2, left_on='date', right_on='period', by='ID')