Pandas 多索引合并

Pandas MultiIndex Merge

假设我有两个数据框如下:

import pandas as pd    
index = pd.MultiIndex.from_tuples([('one', '1993-02-02'), ('one', '1994-02-03'), ('two', '1995-02-18'), ('two', '1996-03-01')])
s = pd.DataFrame(np.arange(1.0, 5.0), index=index)
s.rename(columns = {0 : 'test1'}, inplace = True)
s.index.set_names(['name','date'], in place=True)

index = pd.MultiIndex.from_tuples([('one', '19930630'), ('one', '19940630'), ('two', '19950630'), ('two', '19960630')])
d = pd.DataFrame(np.arange(1.0, 5.0), index=index)
d.rename(columns = {0 : 'test2'}, inplace = True)
d.index.set_names(['name','date'], in place=True)

其中s和d如下:

我想根据年份索引合并它们,以便它们显示如下:

如有任何帮助,我将不胜感激。

你可以reset_index,然后它会将索引合并到 df 合并(这更容易)

s.reset_index().assign(key=s.index.get_level_values(1).str[:4]).merge(d.reset_index().assign(key=d.index.get_level_values(1).str[:4]),on=['name','key'],how='left').set_index(['name','date_x']).drop(['key','date_y'],1)
Out[1099]: 
                 test1  test2
name date_x                  
one  1993-02-02    1.0    1.0
     1994-02-03    2.0    2.0
two  1995-02-18    3.0    3.0
     1996-03-01    4.0    4.0