【问题标题】:Pandas MultiIndex MergePandas MultiIndex 合并
【发布时间】:2018-07-22 03:06:19
【问题描述】:

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

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如下:

我想根据年份索引合并它们,使它们如下所示:

我将不胜感激任何帮助。

【问题讨论】:

  • 你到底想合并什么?日期的年份部分?
  • @philngo 是的,我进行了编辑以给索引命名

标签: pandas dataframe concat multi-index


【解决方案1】:

你可以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

【讨论】:

    猜你喜欢
    • 2018-06-30
    • 2016-04-01
    • 2020-11-30
    • 2020-06-15
    • 2016-09-18
    • 2019-08-27
    • 2018-01-29
    • 2019-12-21
    • 2017-06-18
    相关资源
    最近更新 更多