【问题标题】:Concatenate multiindex连接多索引
【发布时间】:2021-05-10 02:30:39
【问题描述】:

区域和日期上合并 2 个数据框的最简单方法是什么?

我尝试加入、合并和连接。我收到“'

old_df                                  old_value
      region            date      
        England       2010-01-01         4
                      2010-01-02         5
         Wales        2010-01-01         4
                      2010-01-02         3
...
new_df 

                        name         new_value
      region            date      
        England       2010-01-01         10
                      2010-01-02         10
         Wales        2010-01-01         9
                      2010-01-02         10
...

预期输出

                                 old_value   new_value 
       region          date      
        England       2010-01-01         4         10
                      2010-01-02         5         10
         Wales        2010-01-01         4         9
                      2010-01-02         3         10

【问题讨论】:

    标签: python python-3.x pandas multi-index


    【解决方案1】:

    完美运行。您确定您已确保您的日期列是日期吗? pd.to_datetime()

    df_old = pd.read_csv(io.StringIO("""
          region            date      old_value
            England       2010-01-01         4
                nan          2010-01-02         5
             Wales        2010-01-01         4
                nan          2010-01-02         3
    """), sep="\s+")
    
    df_new = pd.read_csv(io.StringIO("""        
          region            date       new_value
            England       2010-01-01         10
                nan          2010-01-02         10
             Wales        2010-01-01         9
                 nan         2010-01-02         10"""), sep="\s+")
    
    df_old.region = df_old.region.fillna(method="ffill")
    df_new.region = df_new.region.fillna(method="ffill")
    df_old.date = pd.to_datetime(df_old.date)
    df_new.date = pd.to_datetime(df_new.date)
    
    dfj = df_old.set_index(["region","date"]).join(df_new.set_index(["region","date"]))
    
                        old_value  new_value
    region  date                            
    England 2010-01-01          4         10
            2010-01-02          5         10
    Wales   2010-01-01          4          9
            2010-01-02          3         10
    

    【讨论】:

    • 非常感谢。我认为这是日期时间。有没有办法使用 concat 做同样的事情,所以我可以在 concat 中使用“keys”选项?
    • 我一般用pd.concat()来连接不加入/合并。这确实有效:pd.concat([df_old, df_new], keys=["region","date"], axis=1)
    猜你喜欢
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 2020-10-21
    • 2021-01-17
    • 2021-09-23
    • 1970-01-01
    • 2021-02-22
    相关资源
    最近更新 更多