Присоединяйтесь к кадрам данных - один с мультииндексными столбцами, а другой без

Я пытаюсь объединить два фрейма данных: один с мультииндексными столбцами, а другой с одним именем столбца. У них похожий индекс.

Я получаю следующее предупреждение: «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)

Как лучше всего соединить эти два фрейма данных?


person Eyal S.    schedule 05.04.2017    source источник


Ответы (2)


Это зависит от того, что вы хотите! Вы хотите, чтобы столбец из df2 был выровнен с 1-м или вторым уровнем столбцов из 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)

введите описание изображения здесь

person piRSquared    schedule 05.04.2017
comment
@jezrael ну вот :-) - person piRSquared; 05.04.2017
comment
Как вы создали эту табличную графику? - person BallpointBen; 19.04.2018

Я думаю, проще всего создать MultiIndex в df2, а затем использовать concat или join:

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)

Or:

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  
person jezrael    schedule 05.04.2017