Python:如何按date_col分组统计DataFrame中带狗的唯一ID数量?
Pandas实现按日期统计有狗的唯一ID数量
方法一:分步处理(逻辑清晰)
先构造示例数据:
import pandas as pd data = { 'date_col': ['2020-01-01', '2020-01-01', '2020-05-01', '2020-05-01', '2020-05-01', '2020-06-01', '2020-07-01', '2020-08-01'], 'ID': [1, 2, 1, 2, 1, 2, 3, 1], 'dog': [1, 0, 1, 0, 1, 0, 1, 1] } df = pd.DataFrame(data)
执行统计操作:
# 筛选出有狗的记录,按日期分组统计唯一ID数量 dog_unique_counts = df[df['dog'] == 1].groupby('date_col')['ID'].nunique().reset_index(name='dog_count_uniqueID') # 获取所有唯一日期,确保不遗漏任何原始日期 all_dates = df['date_col'].drop_duplicates().to_frame(name='date_col') # 左连接补全所有日期,缺失值填充为0 result = pd.merge(all_dates, dog_unique_counts, on='date_col', how='left').fillna(0) # 将统计列转为整数类型(可选) result['dog_count_uniqueID'] = result['dog_count_uniqueID'].astype(int)
方法二:聚合函数直接处理(更简洁)
基于上述示例DataFrame,一行聚合操作完成需求:
result = df.groupby('date_col').agg( dog_count_uniqueID=('ID', lambda x: x[df.loc[x.index, 'dog'] == 1].nunique()) ).reset_index()
最终结果
两种方法都会生成你期望的输出:
| date_col | dog_count_uniqueID |
|---|---|
| 2020-01-01 | 1 |
| 2020-05-01 | 1 |
| 2020-06-01 | 0 |
| 2020-07-01 | 1 |
| 2020-08-01 | 1 |
内容的提问来源于stack exchange,提问作者jartymcfly
相关产品推荐
相关产品推荐

