考虑这个DataFrame:
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()
答案 0 :(得分:2)
将groupby
与SeriesGroupBy.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