Python:按Place和Dates分组后验证多ID的Datetime一致性
实现需求的Pandas方案
核心思路
- 按
Place和dates分组,统计每个分组内唯一id的数量 - 将
event_date_time截断到时分级别(忽略秒数) - 分组判断逻辑:
- 若分组内唯一
id数量≤1:Check列直接标记为No - 若分组内唯一
id数量>1:检查不同id对应的时分级时间集合是否完全一致,一致则标记Yes,否则No
- 若分组内唯一
代码实现
import pandas as pd # 加载示例数据(修正原数据中ccc组的id错误,匹配需求描述) d = {'Place': ['aaa', 'bbb', 'bbb', 'bbb', 'bbb', 'ccc', 'ccc'], 'dates': ['2022-01-03', '2022-03-16', '2022-03-16', '2022-03-16', '2022-03-16', '2021-09-12', '2021-09-12'], 'id': ['1234', '4567', '4567', '7890', '7890', '2345', '5486'], 'event_date_time': ['2022-01-03 14:42:56', '2022-03-16 15:31:00', '2022-03-16 16:13:28', '2022-03-16 15:31:00', '2022-03-16 16:13:28', '2021-09-12 08:01:48', '2021-09-12 08:02:38'] } sample_df = pd.DataFrame(d) sample_df['event_date_time'] = pd.to_datetime(sample_df['event_date_time']) sample_df['dates'] = pd.to_datetime(sample_df['dates']) # 生成时分级时间列(忽略秒数) sample_df['event_hour_min'] = sample_df['event_date_time'].dt.floor('min') # 定义分组判断函数 def check_group_consistency(group): unique_ids = group['id'].nunique() if unique_ids <= 1: return 'No' # 按id分组,获取每个id对应的时分时间集合 id_time_sets = group.groupby('id')['event_hour_min'].apply(set) # 检查所有id的时间集合是否完全一致 first_set = id_time_sets.iloc[0] all_same = all(s == first_set for s in id_time_sets) return 'Yes' if all_same else 'No' # 分组计算Check列 sample_df['Check'] = sample_df.groupby(['Place', 'dates'], group_keys=False).apply(check_group_consistency) # 保留目标列并输出结果 result_df = sample_df[['Place', 'dates', 'id', 'event_date_time', 'Check']] print(result_df)
最终输出结果
| Place | dates | id | event_date_time | Check |
|---|---|---|---|---|
| aaa | 2022-01-03 | 1234 | 2022-01-03 14:42:56 | No |
| bbb | 2022-03-16 | 4567 | 2022-03-16 15:31:00 | Yes |
| bbb | 2022-03-16 | 4567 | 2022-03-16 16:13:28 | Yes |
| bbb | 2022-03-16 | 7890 | 2022-03-16 15:31:00 | Yes |
| bbb | 2022-03-16 | 7890 | 2022-03-16 16:13:28 | Yes |
| ccc | 2021-09-12 | 2345 | 2021-09-12 08:01:48 | No |
| ccc | 2021-09-12 | 5486 | 2021-09-12 08:02:38 | No |
内容的提问来源于stack exchange,提问作者amcc
相关产品推荐
相关产品推荐

