2017-11-13 12 views
1

私は以下のテーブルを持っています。合計でグループ化し、グループの日付の最小値を見つけます

          msno  date num_25 num_50 num_75 num_985 num_100 num_unq 
1 PNxIsSLWOJDCm7pNPFzRO/6Mmg2WeZA2nf6hw6t1x3g= 20151201  3  3  2  0  8  11 
2 PNxIsSLWOJDCm7pNPFzRO/6Mmg2WeZA2nf6hw6t1x3g= 20160628  0  0  1  1  1  3 
3 PNxIsSLWOJDCm7pNPFzRO/6Mmg2WeZA2nf6hw6t1x3g= 20170106  2  1  0  0  35  34 
4 KXF9c/T66LZIzFq+xS64icWMhDQE6miCZAtdXRjZHX8= 20150803  0  0  0  0  16  11 
5 KXF9c/T66LZIzFq+xS64icWMhDQE6miCZAtdXRjZHX8= 20160527  4  3  0  2  2  11 
6 KXF9c/T66LZIzFq+xS64icWMhDQE6miCZAtdXRjZHX8= 20160808  14  3  4  1  15  31 

私はnum_(UNQまで25)を合計することによってグループにそれらを希望して、最も早い日付と最新の日付が同一msnoで発生するかを決定。

df = df_user_logs_v2.drop('date', axis=1).groupby('msno', as_index=False).sum() 

上記のコードでは、すべての値を集計できますが、日付を削除する必要があります。私は日付の最小値と最大値を行数と一緒に保持したい。最初msnoため

予想される出力:

          msno num_25_sum num_50_sum num_75_sum num_985_sum num_100_sum num_unq_sum date_earliest date_latest count 
1 PNxIsSLWOJDCm7pNPFzRO/6Mmg2WeZA2nf6hw6t1x3g=   5   4   3   1   44   48  20151201 20170106  3 

答えて

0

のは、これを試してみましょう:

d = dict((i,'sum') for i in df.columns[2:]) 
d['date'] = ['min','max'] 
d['msno'] = 'count' 
df_out = df.groupby('msno').agg(d) 
df_out.columns = df_out.columns.map('_'.join) 

df_out 

出力:

           msno_count date_min date_max \ 
msno                   
KXF9c/T66LZIzFq+xS64icWMhDQE6miCZAtdXRjZHX8=   3 20150803 20160808 
PNxIsSLWOJDCm7pNPFzRO/6Mmg2WeZA2nf6hw6t1x3g=   3 20151201 20170106 

               num_75_sum num_50_sum \ 
msno                 
KXF9c/T66LZIzFq+xS64icWMhDQE6miCZAtdXRjZHX8=   4   6 
PNxIsSLWOJDCm7pNPFzRO/6Mmg2WeZA2nf6hw6t1x3g=   3   4 

               num_985_sum num_25_sum \ 
msno                  
KXF9c/T66LZIzFq+xS64icWMhDQE6miCZAtdXRjZHX8=   3   18 
PNxIsSLWOJDCm7pNPFzRO/6Mmg2WeZA2nf6hw6t1x3g=   1   5 

               num_100_sum num_unq_sum 
msno                  
KXF9c/T66LZIzFq+xS64icWMhDQE6miCZAtdXRjZHX8=   33   53 
PNxIsSLWOJDCm7pNPFzRO/6Mmg2WeZA2nf6hw6t1x3g=   44   48 

enter image description here

関連する問題