Pandas:merge_asof-like解决方案,用于合并两个多索引DataFrame?

时间:2018-04-03 23:24:46

标签: python pandas dataframe merge multi-index

我有两个数据框,df1df2,它们都是多索引的。

在第一个索引级别,两个数据帧共享相同的密钥(即df1.index.get_level_values(0)df2.index.get_level_values(0)包含相同的元素)。这些键是无序字符串,例如['foo','bar','baz']

在第二个索引级别,两个数据帧的时间戳都是有序的,但间隔不等。

我的问题如下。我希望以这样的方式合并df1df2,对于级别1的每个键,df2的值应插入df1而不更改顺序df1

我尝试使用pd.mergepd.merge_asofpd.MultiIndex.searchsorted。从这些方法的描述来看,似乎其中一个应该为我做的伎俩,但我无法弄清楚如何。理想情况下,我希望找到一种避免在index.get_level_values(0)中循环键的解决方案,因为我的数据帧可能会变大。

一些失败的尝试尝试:

df_merged = pd.merge(left=df1.reset_index(), right=df2.reset_index(),
                     left_on=[['some_keys', 'timestamps_df1']], right_on=[['some_keys', 'timestamps_df2']],
                     suffixes=('', '_2')
                     ) # after sorting
# FAILED

df2.index.searchsorted(df1, side='right') # after sorting
# FAILED

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

根据您的说明,以下是merge_asof

的解决方案
df_merged = pd.merge_asof(left=df1.reset_index(), right=df2.reset_index(),
                     left_on=['timestamps_df1'], right_on=['timestamps_df2'],by='some_keys',
                     suffixes=('', '_2')
                     )