如何按天去重统计猫咪到访天数?以猫咪A三天统计为例
统计猫咪到访天数的实现方案
问题背景
某猫咪收容所的传感器记录带射频项圈的猫咪进出数据,单只猫咪单日多次进出会生成多条记录。基于提供的Pandas数据表,需要统计名为A的猫咪在三天内的到访天数(单日多次记录仅计为1天)。
原始数据代码
import pandas as pd data = {'Date': ['01-09-2022', '01-09-2022', '01-09-2022', '01-09-2022', '02-09-2022', '02-09-2022', '02-09-2022', '02-09-2022', '03-09-2022', '03-09-2022', '03-09-2022', '03-09-2022', '03-09-2022'], 'Name': ['A', 'A', 'A', 'A', 'B', 'C', 'C', 'B', 'D', 'C', 'C', 'D', 'A']} df = pd.DataFrame(data)
数据预览
| Date | Name | |
|---|---|---|
| 0 | 01-09-2022 | A |
| 1 | 01-09-2022 | A |
| 2 | 01-09-2022 | A |
| 3 | 01-09-2022 | A |
| 4 | 02-09-2022 | B |
| 5 | 02-09-2022 | C |
| 6 | 02-09-2022 | C |
| 7 | 02-09-2022 | B |
| 8 | 03-09-2022 | D |
| 9 | 03-09-2022 | C |
| 10 | 03-09-2022 | C |
| 11 | 03-09-2022 | D |
| 12 | 03-09-2022 | A |
实现方法
方法1:分步筛选+去重计数
先筛选出猫咪A的所有记录,再对日期列去重后统计数量:
# 筛选猫咪A的记录 cat_a_records = df[df['Name'] == 'A'] # 统计唯一日期的数量(即到访天数) visit_days = cat_a_records['Date'].nunique() print(visit_days) # 输出:2
方法2:分组聚合一次性统计
通过分组操作,直接统计所有猫咪的到访天数,再提取目标猫咪的结果:
# 按猫咪姓名分组,统计每只猫的唯一到访日期数 cat_visit_stats = df.groupby('Name')['Date'].nunique() # 获取猫咪A的到访天数 cat_a_days = cat_visit_stats['A'] print(cat_a_days) # 输出:2
方法3:链式调用简化写法
将筛选和统计合并为一行代码,更简洁:
cat_a_days = df.loc[df['Name'] == 'A', 'Date'].nunique() print(cat_a_days) # 输出:2
核心逻辑说明
所有方法的核心都是利用nunique()函数——该函数会自动对指定列的重复值去重,并返回唯一值的数量,完美匹配"单日多次记录仅计为1天"的需求。
内容的提问来源于stack exchange,提问作者Herza Ryo
相关产品推荐
相关产品推荐

