【问题标题】:Join dataframes - one with multiindex columns and the other without加入数据框 - 一个具有多索引列,另一个没有
【发布时间】:2017-08-30 14:54:04
【问题描述】:

我正在尝试连接两个数据框 - 一个具有多索引列,另一个具有单个列名。它们具有相似的索引。

我收到以下警告: "UserWarning:不同级别之间的合并可能会产生意想不到的结果(左侧 3 个级别,右侧 1 个级别)"

例如:

arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
          ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
df = pd.DataFrame(np.random.randn(3, 8), index=['A', 'B', 'C'], columns=index)
df2 = pd.DataFrame(np.random.randn(3), index=['A', 'B', 'C'],columns=['w'])
df3 = df.join(df2)

加入这两个数据框的最佳方法是什么?

【问题讨论】:

    标签: python pandas join multi-index


    【解决方案1】:

    这取决于你想要什么!是否希望 df2 中的列与 df 中的第一级或第二级列对齐?

    您必须在df2 的列中添加一个级别

    pd.concat 超级俗气

    df.join(pd.concat([df2], axis=1, keys=['a']))
    

    更好的方法

    df2.columns = pd.MultiIndex.from_product([['a'], df2.columns])
    
    df.join(df2)
    

    【讨论】:

    • @jezrael 你去 :-)
    • 您是如何创建该表格图形的?
    【解决方案2】:

    我认为最简单的方法是在df2 中创建MultiIndex,然后使用concatjoin

    df2.columns = pd.MultiIndex.from_tuples([('a','w')])
    print (df2)
              a
              w
    A -0.562729
    B -0.212032
    C  0.102451
    
    df2.columns = [['a'], df2.columns]
    print (df2)
              a
              w
    A -1.253881
    B -0.637752
    C  0.907105
    

    df3 = pd.concat([df, df2], axis=1)
    

    或者:

    df3 = df.join(df2)
    
    print (df3)
    first        bar                 baz                 foo                 qux  \
    second       one       two       one       two       one       two       one   
    A      -0.269667  0.221566  1.138393  0.871762 -0.063132 -1.995682 -0.797885   
    B      -0.456878  0.293350 -1.040748 -1.307871  0.002462  1.580711 -0.198943   
    C      -0.691755 -0.279445 -0.809215 -0.006658  1.452484  0.516414 -0.295961   
    
    first                    a  
    second       two         w  
    A       1.068843 -0.562729  
    B       1.247057 -0.212032  
    C      -0.345300  0.102451  
    

    【讨论】:

      猜你喜欢
      • 2019-03-12
      • 1970-01-01
      • 1970-01-01
      • 2020-08-03
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      • 2021-04-12
      相关资源
      最近更新 更多