次のデータフレームがあります。
data = pd.DataFrame({'user_id' : ['a1', 'a1', 'a1', 'a2','a2','a2','a3','a3','a3'], 'product_id' : ['p1','p1','p2','p1','p1','p1','p2','p2','p3']})
product_id user_id
p1 a1
p1 a1
p2 a1
p1 a2
p1 a2
p1 a2
p2 a3
p2 a3
p3 a3
実際には他にもいくつかの列があるかもしれませんが、product_idとuser_idの列でデータフレームごとにグループ化し、各組み合わせの数をカウントして、新しいデータフレームに新しい列として追加する必要があります。
出力は次のようになります。
user_id product_id count
a1 p1 2
a1 p2 1
a2 p1 3
a3 p2 2
a3 p3 1
私は次のコードを試しました:
grouped=data.groupby(['user_id','product_id']).count()
しかし結果は:
user_id product_id
a1 p1
p2
a2 p1
a3 p2
p3
実際に私にとって最も重要なことは、発生数を含む列名のカウントを持つことです。後で列を使用する必要があります。
たぶんこれがあなたの望みですか?
>>> data = pd.DataFrame({'user_id' : ['a1', 'a1', 'a1', 'a2','a2','a2','a3','a3','a3'], 'product_id' : ['p1','p1','p2','p1','p1','p1','p2','p2','p3']})
>>> count_series = data.groupby(['user_id', 'product_id']).size()
>>> count_series
user_id product_id
a1 p1 2
p2 1
a2 p1 3
a3 p2 2
p3 1
dtype: int64
>>> new_df = count_series.to_frame(name = 'size').reset_index()
>>> new_df
user_id product_id size
0 a1 p1 2
1 a1 p2 1
2 a2 p1 3
3 a3 p2 2
4 a3 p3 1
>>> new_df['size']
0 2
1 1
2 3
3 2
4 1
Name: size, dtype: int64
結果を組み合わせて別の列を作成する場合は、@ Nehalの応答を少し作成します。
product_id列とsize列を組み合わせることができます。
new_df['combo'] = new_df['product_id'].map(str) + '(' + new_df['size'].map(str) +')'
...さらにgroupbyを使用して、「user_id」で列を整理します
new_df['combo'].astype(str).groupby(new_df['userid']).agg(['size',', '.join])