2017-03-29 35 views
4

下面我有一個數據集的樣本(只顯示前幾行,但也有193行):groupby是否會自動將大熊貓中的所有非數字列分組?

country,beer_servings,spirit_servings,wine_servings,total_litres_of_pure_alcohol,continent 
Afghanistan,0,0,0,0.0,Asia 
Albania,89,132,54,4.9,Europe 
Algeria,25,0,14,0.7,Africa 
Andorra,245,138,312,12.4,Europe 
Angola,217,57,45,5.9,Africa 
Antigua & Barbuda,102,128,45,4.9,North America 
... 

當我運行此:drinks.groupby('continent').head()

我回去用30行的數據幀。但在這30行中,我仍然有continent的重複名稱。例如下面的圖片可以看到,Europe重複兩次(在行1和3):

enter image description here

我無法理解爲什麼我仍然有相同的大陸時,兩排我原本是按大洲分組的?

在這種情況下,groupby操作也分組country即使我從來沒有在groupby函數中指定它嗎?因爲我知道在SQL中你應該使用像max,min,sum等聚合函數。但在這種情況下,我不必傳入一個聚合函數,我得到了上面的結果。

回答

3

不!

發生了什麼事是headgroupby對象上的方法,其行爲與pd.DataFrame.head稍有不同。

groupby version of head所做的是返回每個組的頭部。

因此,我們可以通過傳遞1head方法見這更清楚地看到它從每個組返回每個子集的第一行

df.groupby('continent').head(1) 

enter image description here

2

drinks.groupby('continent').head([n=5])返回第一個n行,但隨後按原始索引重新排序。嘗試撥打drinks.groupby('continent').head(1),您會看到每個大洲只有一個國家包含在結果中。

+0

但是當我沒有傳入任何參數時,間接它仍然是由'continent'和'country'分組來糾正的?由於歐洲大陸有多行,因此「歐洲」。 – CapturedTree

+0

這是正確的。 – DyZ

+0

我說的是正確的? – CapturedTree