熊猫:用于合并两个多索引DataFrame的类似于merge_asof的解决方案?

A. *_*gne 3 python merge multi-index dataframe pandas

我有两个dataframes,df1df2说,它们都是多索引。

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

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

我的问题如下。我想合并df1,并df2以这样的方式,在级别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
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏!

WeN*_*Ben 6

根据您的描述,以下是解决方案 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')
                     )
Run Code Online (Sandbox Code Playgroud)

  • 我有些as愧,但我也非常感谢。我不会再忘记“ by”键了! (3认同)