2013-01-13 8 views
11

Jeśli mam następujący DataframeKonwersja grupa pandy przez obiekt do multi-indeksowane 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 

mogę Grupuj według nazwy i przeznaczenia ...

>>> 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 

ale chciałbym nowy wielo -indexed dataframe z niego, który wygląda mniej więcej tak

   Length 
Alice Athens  3 
     Rome   1 
     Rome   5 
Bob  Athens  3 
     Athens  2 
     Rome   5 

wydaje się, że powinien być jakiś sposób, aby zrobić coś podobnego Dataframe(grouped), aby uzyskać moją indeksowaną ramkę danych, ale zamiast tego otrzymuję PandasError ("Konstruktor DataFrame nie jest poprawnie wywoływany!").

Jaki jest najprostszy sposób na uzyskanie tego? Ponadto, każdy wie, czy kiedykolwiek będzie możliwość przekazania obiektu groupby do konstruktora, lub jeśli robię to po prostu nie tak?

Dzięki

Odpowiedz

12

Ponieważ nie jesteś agregowania podobnie indeksowane wierszy, spróbuj ustawić indeks z listą nazw kolumn.

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