Я хотел бы добавить новый уровень в индекс фрейма данных на основе имени столбца. Как я могу это сделать ?
df
home city
A -0.166809 0.213299
B -0.040300 0.034583
C -0.002245 0.001058
Желаемый результат
A home -0.166809
city 0.213299
B home -0.040300
city 0.034583
C home -0.002245
city 0.001058
Я могу построить мультииндекс с этим, но как я могу создать новый фрейм данных и сопоставить данные?
idx = pd.MultiIndex.from_product ([df.index, df.columns])
pd.DataFrame(df.values, ix)
ValueError: Shape of passed values is (3, 2), indices imply (6, 2)
Вы можете использовать df.stack()
print(df.stack())
A home -0.166809
city 0.213299
B home -0.040300
city 0.034583
C home -0.002245
city 0.001058
dtype: float64
Возвращаясь к вашему коду, вы можете попробовать numpy.ravel
, чтобы сгладить df.values
, чтобы он соответствовал форме idx
(idx
имеет 6 элементов, df.values
возвращает только 3 строки)
idx = pd.MultiIndex.from_product([df.index, df.columns])
df = pd.DataFrame(df.values.ravel(), idx)
print(df)
0
A home -0.166809
city 0.213299
B home -0.040300
city 0.034583
C home -0.002245
city 0.001058
Спасибо за ваш комментарий о моем коде