1

結合したい2つのデータフレームがあり、左側のデータフレームには(日付、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)

しかし、この関数は非常に遅いです。このマージ機能をより高速かつ効率的にする方法はありますか?

私が達成しようとしていることに関連するこれらのリンクを見つけることができます:

あなたのコメントと助けを前もってありがとう!

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 に答える