我有以下df

            h1 h2         date  c
0   002599f58e  A   2019-09-23  1
1   002599f58e  A   2019-09-24  3
2   005344fe83  C   2019-09-30  7
3   005344fe83  D   2019-10-02  1
4   005344fe83  D   2019-10-03  2


我想计算h1h2中的唯一天数。因此,我应该以如下形式结束:

            h1  h2  count
0   002599f58e   A      2
2   005344fe83   C      1
4   005344fe83   D      2


因为A在两天内出现,C在一天内出现,D在另外两天内出现。我尝试过类似的东西

days = df.groupby(["h1",
                   df["date"].dt.floor("D"),
                   "h3"]).size().reset_index(name="count")


但这是行不通的。有任何想法吗?

最佳答案

使用DataFrameGroupBy.nunique

#convert to datetimes and if necessary remove times by floor
df['date'] = pd.to_datetime(df['date']).dt.floor("D")

days = df.groupby(["h1", 'h2'])["date"].nunique().reset_index(name="count")
print (days)
           h1 h2  count
0  002599f58e  A      2
1  005344fe83  C      1
2  005344fe83  D      2

10-07 20:28