2017-04-05 57 views
1

我試圖加入兩個數據框 - 一個具有多索引列,另一個具有單列名稱。他們有類似的指數。加入數據框 - 一個具有多索引列,另一個沒有

我得到以下警告: 「UserWarning:不同級別之間的合併可以給一個意想不到的結果(在左側,1 3倍的水平右側)」

例如:

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) 

加入這兩個數據框的最佳方式是什麼?

回答

3

這取決於你想要什麼!您是否希望df2的列與來自df的第1或第2級列對齊?

你的水平增加的df2

列與pd.concat

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

更好的辦法超級cheezy

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

df.join(df2) 

enter image description here

+0

@jezrael你去那裏:-) – piRSquared

2

我覺得simpliest是創建MultiIndexdf2然後用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 
相關問題