1

我有两个数据框,我希望将它们连接在一起,其中左侧数据框具有按(日期,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)

但是这个功能很慢。有没有人有办法让这个合并功能更快更高效?

您可能会发现这些链接与我要完成的工作相关:执行 asof-join 的示例合并具有数百万行的表

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

4

1 回答 1

2

您可以使用pandas 0.19 中添加的“asof join”功能

pd.merge_asof(df1, df2, left_on='date', right_on='period', by='ID')
于 2016-10-03T19:40:45.950 回答