Преобразование pandas по объекту в мультииндексированный Dataframe
Если у меня есть следующий Dataframe
>>> df = pd.DataFrame({'Name': ['Bob'] * 3 + ['Alice'] * 3, \
'Destination': ['Athens', 'Rome'] * 3, 'Length': np.random.randint(1, 6, 6)})
>>> df
Destination Length Name
0 Athens 3 Bob
1 Rome 5 Bob
2 Athens 2 Bob
3 Rome 1 Alice
4 Athens 3 Alice
5 Rome 5 Alice
Я могу присвоить имя и место назначения...
>>> grouped = df.groupby(['Name', 'Destination'])
>>> for nm, gp in grouped:
>>> print nm
>>> print gp
('Alice', 'Athens')
Destination Length Name
4 Athens 3 Alice
('Alice', 'Rome')
Destination Length Name
3 Rome 1 Alice
5 Rome 5 Alice
('Bob', 'Athens')
Destination Length Name
0 Athens 3 Bob
2 Athens 2 Bob
('Bob', 'Rome')
Destination Length Name
1 Rome 5 Bob
но я бы хотел, чтобы из него был создан новый многоиндексированный фрейм, который выглядит примерно так:
Length
Alice Athens 3
Rome 1
Rome 5
Bob Athens 3
Athens 2
Rome 5
Кажется, должен быть способ сделать что-то вроде Dataframe(grouped)
, чтобы получить мой многоиндексированный Dataframe, но вместо этого я получаю PandasError
(конструктор DataFrame неправильно вызван!).
Какой самый простой способ получить это? Кроме того, кто-нибудь знает, будет ли когда-нибудь вариант передать объект groupby конструктору, или если я просто делаю это неправильно?
Спасибо
Ответы
Ответ 1
Поскольку вы не объединяете аналогично индексированные строки, попробуйте установить индекс со списком имен столбцов.
In [2]: df.set_index(['Name', 'Destination'])
Out[2]:
Length
Name Destination
Bob Athens 3
Rome 5
Athens 2
Alice Rome 1
Athens 3
Rome 5