加入数据帧 - 一个是多索引列,另一个是没有

时间:2017-04-05 06:38:46

标签: python pandas join multi-index

我正在尝试加入两个数据框 - 一个使用multiindex列,另一个使用单个列名。他们有类似的指数。

我收到以下警告: “用户警告:在不同级别之间合并会产生意想不到的结果(左侧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)

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

2 个答案:

答案 0 :(得分:5)

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

您必须在df2

列中添加一个级别

使用pd.concat

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

更好的方式

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

df.join(df2)

enter image description here

答案 1 :(得分:2)

我认为最简单的是在MultiIndex中创建df2,然后使用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