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