Объединение многоиндексных столбцов с использованием панд

#python #pandas #concatenation #multi-index

Вопрос:

Как я могу объединить два фрейма данных pandas, где один фрейм данных содержит многоиндексированные столбцы? Мне нужно сохранить мультииндекс в конечном кадре данных.

 import numpy as np
import pandas as pd

df1_cols = ["a", "b"]
df1_vals = np.random.randint(1, 10, [2, 2])
df1 = pd.DataFrame(data=df1_vals, columns=df1_cols)

df2_cols = pd.MultiIndex.from_tuples([("c", "1"), ("c", "2"), ("d", "1"), ("d", "2")])
df2_vals = np.random.randint(1, 10, [2, 4])
df2 = pd.DataFrame(data=df2_vals, columns=df2_cols)

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

При использовании pd.concat() мультииндекс будет раздавлен.

    a  b  (c, 1)  (c, 2)  (d, 1)  (d, 2)
0  3  7       1       6       1       3
1  6  1       2       7       6       3
 

Ответ №1:

Вам нужно MultiIndex в обоих кадрах данных для MultiIndex в конечном кадре данных:

 df1.columns = pd.MultiIndex.from_product([df1.columns, ['']])
print (df1.columns)
MultiIndex([('a', ''),
            ('b', '')],
           )

df = pd.concat([df1, df2], axis=1)
print (df)
   a  b  c     d   
         1  2  1  2
0  5  6  6  9  7  7
1  1  7  7  7  2  6