2016-12-24 33 views
1

考慮到這個數據幀:計數不同的日期出現每個ID在熊貓

id  date 
837 2016-12-01 
837 2016-12-01 
840 2016-12-01 
840 2016-12-01 
840 2016-12-01 
837 2016-12-02 
837 2016-12-02 
837 2016-12-02 
841 2016-12-02 
841 2016-12-02 
837 2016-12-03 
837 2016-12-03 
841 2016-12-03 

什麼是計算以下結果的最佳方式:

id  number_of_distinct_dates 
837 3 
840 1 
841 2 

說明:每個id,計算數量不同的date出現,並將結果放入新的DataFrame中。這裏,837出現在3個不同的日期,840只出現在一個日期上,而841出現在2個不同的日期。

我試着用DataFrame.groupby()玩,但到目前爲止,我已經能夠想出最接近的是:

id  date 
837 2016-12-01 2 
     2016-12-02 3 
     2016-12-03 2 
840 2016-12-01 3 
841 2016-12-02 2 
     2016-12-02 1 

通過使用df.groupby(['id','date']).size()

回答

2

使用groupbySeriesGroupBy.nunique,最後reset_index

print (df.groupby('id')['date'].nunique()) 
id 
837 3 
840 1 
841 2 
Name: date, dtype: int64 

print (df.groupby('id',)['date'].nunique().reset_index(name='number_of_distinct_dates')) 
    id number_of_distinct_dates 
0 837       3 
1 840       1 
2 841       2