使用Pandas按天分组统计打卡机器每日各设备首次事件数量
原有代码错误说明
- 语法报错是因为括号不匹配,你写的语句多了1个多余的右括号,即使修正语法后逻辑也不符合需求
- 仅用
date.day分组会把不同年份/月份的同一天数据分到同一组,存在逻辑漏洞 - 没有按设备维度去重,直接统计计数是全量打卡次数,不是每台设备每日首次打卡的总和
完整实现方案
第一步:标记每台设备每日首次打卡记录
# 先按打卡时间升序排序,保证每组最早的记录排在最前 my_df = my_df.sort_values('date', ascending=True) # 按【打卡日期+设备号】分组,每组第一条记录标记为1,其余非首次标记为0 my_df['flag'] = my_df.groupby([my_df['date'].dt.date, 'machine']).cumcount().eq(0).astype(int)
运行后即可得到带flag标记的数据集,和你给出的预期标记结果完全一致。
第二步:按天统计每日首次打卡总次数
# 按打卡日期分组,对flag字段求和即为当日首次打卡总次数 daily_stat = my_df.groupby(my_df['date'].dt.date)['flag'].sum().reset_index(name='count_flag')
运行后daily_stat就是你要的统计结果。
内容的提问来源于stack exchange,提问作者Alexis
相关产品推荐
相关产品推荐

