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 следующие:

Я хотел бы объединить их на основе индекса года, чтобы они выглядели следующим образом:

Я был бы очень признателен за любую помощь с этим.

1 ответ

Решение

Вы можете reset_index, тогда это сделает индекс слияния с df merge (что намного проще)

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
Другие вопросы по тегам