У меня есть pandas DataFrame, который выглядит следующим образом (код для его создания находится внизу вопроса):
col_1 col_2 foo_1 foo_2
col_3 col_4 col_3 col_4
0 1 4 2 8 5 7
1 3 1 6 3 8 9
Я бы хотел повернуть foo_1
и foo_2
столбцы «наизнанку», то есть мой ожидаемый результат:
col_1 col_2 col_3 col_4
0 1 4 {'foo_1': 2, 'foo_2': 5} {'foo_1': 8, 'foo_2': 7}
1 3 1 {'foo_1': 6, 'foo_2': 8} {'foo_1': 3, 'foo_2': 9}
Есть ли эффективный (то есть, который не требует написания python l oop, который проходит через каждую строку один за другим ) способ сделать это в pandas?
Код для генерации начального DataFrame:
import pandas as pd
cols = pd.MultiIndex.from_tuples(
[
("col_1", ""),
("col_2", ""),
("foo_1", "col_3"),
("foo_1", "col_4"),
("foo_2", "col_3"),
("foo_2", "col_4"),
]
)
df = pd.DataFrame([[1, 4, 2, 8, 5, 7], [3, 1, 6, 3, 8, 9]], columns=cols)
Код для генерации ожидаемого вывода:
pd.DataFrame(
[
{
"col_1": 1,
"col_2": 4,
"col_3": {"foo_1": 2, "foo_2": 5},
"col_4": {"foo_1": 8, "foo_2": 7},
},
{
"col_1": 3,
"col_2": 1,
"col_3": {"foo_1": 6, "foo_2": 8},
"col_4": {"foo_1": 3, "foo_2": 9},
},
]
)