2016-07-27 203 views
2

這可能是一個非常簡單的問題,但我想了解如何在熊貓中進行分組和索引。熊貓索引編組後

比方說,我有以下數據的數據幀:

df = pd.DataFrame(data={ 
    'p_id': [1, 1, 1, 2, 3, 3, 3, 4, 4], 
    'rating': [5, 3, 2, 2, 5, 1, 3, 4, 5] 
}) 

現在,指數將被自動分配,使數據幀的樣子:

 p_id rating 
0  1  5 
1  1  3 
2  1  2 
3  2  2 
4  3  5 
5  3  1 
6  3  3 
7  4  4 
8  4  5 

當我嘗試組它通過的p_id ,我得到:

>> df[['p_id', 'rating']].groupby('p_id').count() 
      rating 
p_id   
1   3 
2   1 
3   3 
4   2 

我注意到,p_id現在成爲此DataFrame的索引,但第一行看起來很奇怪 - 爲什麼它有'p_id'索引在裏面有空的評價?

我知道如何解決它,那種,如果我這樣做:

>> df[['p_id', 'rating']].groupby('p_id', as_index=False).count() 
     p_id rating 
0  1  3 
1  2  1 
2  3  3 
3  4  2 

現在我沒有這個怪異的第一列,但我有兩個指標,p_id的。

所以我的問題是,當我不使用as_index = False這個額外的行來自哪裏,並且有沒有辦法將DataFrame分組,並保持p_id作爲索引,而不必處理這個額外的行?如果有任何我可以閱讀的文檔,那也將不勝感激。

感謝

回答

2

這只是一個指數名稱...

演示:AAA

In [48]: df 
Out[48]: 
    p_id rating 
AAA 
0  1  5 
1  1  3 
2  1  2 
3  2  2 
4  3  5 
5  3  1 
6  3  3 
7  4  4 
8  4  5 

可以擺脫:在索引名

In [46]: df 
Out[46]: 
    p_id rating 
0  1  5 
1  1  3 
2  1  2 
3  2  2 
4  3  5 
5  3  1 
6  3  3 
7  4  4 
8  4  5 

In [47]: df.index.name = 'AAA' 

講究它使用rename_axis()方法:

In [42]: df[['p_id', 'rating']].groupby('p_id').count().rename_axis(None) 
Out[42]: 
    rating 
1  3 
2  1 
3  3 
4  2 
+0

感謝您使用rename_axis的快捷方式。我知道如何擺脫,但感覺有點尷尬,它是在那裏擺在首位。我只是好奇它爲什麼發生在第一位。 – ymoiseev

+0

因爲它是一個索引名稱。請使用源代碼示例DF嘗試以下操作:'df.index.name ='AAA';打印(df)' – MaxU

+0

噢好吧,明白了,所以它不是空行。感謝澄清和道歉的愚蠢問題:) – ymoiseev