2016-11-29 198 views
0

我使用一些聚合功能做GROUPBY上的熊貓數據幀後,如:Python - Pandas數據框:聚合後的自定義聚合函數?

my_df.groupby(['id']).agg(['count']) 

我想知道是否有可能有一個定製的聚集功能?舉例來說,在我的數據幀:

id  color 
--------------------  
001  red 
001  blue 
001  yellow 
002  green 
002  black 
003  yellow 
003  white 
003  blue 

我想創建一個名爲all_color定製的功能,所以我可以做這樣的事情:

my_df.groupby(['id']).agg(['all_color']) 

,並得到輸出數據幀爲:

id  all_color 
-------------------- 
001  [red,blue,yellow] 
002  [green,black] 
003  [yellow,white,blue] 

回答

1

使用apply函數和tolist()方法將值轉換爲列表。

In [12]: df.groupby('id')['color'].apply(lambda x: x.tolist()) 
Out[12]: 
id 
1  [red, blue, yellow] 
2   [green, black] 
3 [yellow, white, blue] 
Name: color, dtype: object 

使用reset_index該系列轉換成數據幀

In [21]: df.groupby('id')['color'].apply(lambda x: x.tolist()).reset_index() 
Out[21]: 
    id     color 
0 1 [red, blue, yellow] 
1 2   [green, black] 
2 3 [yellow, white, blue] 
+0

謝謝!那麼輸出似乎不是一個數據幀,我們可以把它變成一個數據幀嗎?謝謝! – Edamame

+0

或者至少爲新列指定一個名稱,以便稍後提及......謝謝。 – Edamame

+0

已更新,將系列轉換爲數據框。 – Zero

0

如果你想這是一個數據框,您可以使用pivot_table

In [11]: pd.pivot_table(df, values="id", index=df["id"], columns=df["color"], aggfunc='count', fill_value=0) 
Out[11]: 
color black blue green red white yellow 
id 
1   0  1  0 1  0  1 
2   1  0  1 0  0  0 
3   0  1  0 0  1  1 

注:這是非常相似的輸出get_dummies