2017-06-14 8 views
1

に異なる列を使用して集計するとことでありグループ化(例えば、週7日): enter image description hereIDを持つパンダにおけるデータフレームと配達の日はパンダ

私はGROUPBYを使用したい()パンダ次のように作成します。各日に7つの異なる列(たとえば、delivery_day_1、delivery_day_2など)を作成し、データフレーム内のIDでグループ化された発生をカウントします。それをどうすればできますか?

ありがとうございました。

答えて

2

私はあなたが最初に変形用にgroupby + size + unstackまたはcrosstabが必要だと思います。その後

必要なアドオンがreindex_axisと最後add_prefixによってweekday秒欠けている場合:

サンプル:

df = pd.DataFrame({'subscription_id':[1,2,3,1], 'delivery_weekday':[1,1,2,1]}) 

print (df) 
    delivery_weekday subscription_id 
0     1    1 
1     1    2 
2     2    3 
3     1    1 

df = df.groupby(['subscription_id','delivery_weekday']) \ 
     .size() \ 
     .unstack(fill_value=0) \ 
     .reindex_axis(range(1,8), fill_value=0, axis=1) \ 
     .add_prefix('delivery_day_') 

print (df) 
delivery_weekday delivery_day_1 delivery_day_2 delivery_day_3 \ 
subscription_id              
1        2    0    0 
2        1    0    0 
3        0    1    0 

delivery_weekday delivery_day_4 delivery_day_5 delivery_day_6 \ 
subscription_id              
1        0    0    0 
2        0    0    0 
3        0    0    0 

delivery_weekday delivery_day_7 
subscription_id     
1        0 
2        0 
3        0 

df = pd.crosstab(df['subscription_id'],df['delivery_weekday']) \ 
     .reindex_axis(range(1,8), fill_value=0, axis=1) \ 
     .add_prefix('delivery_day_') 
print (df) 

delivery_weekday delivery_day_1 delivery_day_2 delivery_day_3 \ 
subscription_id              
1        2    0    0 
2        1    0    0 
3        0    1    0 

delivery_weekday delivery_day_4 delivery_day_5 delivery_day_6 \ 
subscription_id              
1        0    0    0 
2        0    0    0 
3        0    0    0 

delivery_weekday delivery_day_7 
subscription_id     
1        0 
2        0 
3        0 
関連する問題