2016-11-29 19 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']) 

をして、出力データ・フレームを取得:

答えて

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

関連する問題