2013-01-13 83 views
11

如果我有以下的數據幀轉換熊貓集團多索引的數據幀

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

我可以通過名稱和目標GOUP ...

>>> 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)來獲取我的多索引數據幀,但是我得到一個PandasError(「DataFrame構造函數沒有正確調用!」)。

什麼是最簡單的方法來得到這個?另外,任何人都知道是否會有將groupby對象傳遞給構造函數的選項,或者如果我只是做錯了?

感謝

回答

12

既然你不是聚集索引類似行,請嘗試使用列名的列表設置索引。

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