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
假设我有两个数据框如下:
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