#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