检查按其他列分组后的各个ID的DateTime是否相同

oknrviil  于 2022-09-21  发布在  其他
关注(0)|答案(1)|浏览(143)

下表包含4列:Place(对象类型)Dates(DateTime)id(对象类型)Event_DateTime(DateTime)
Place|Dates|id|Event_Datetime
-|-|
AAA|2022-01-03|1234|2022-01-03 14:42:56
Bbb|2022-03-16|4567|2022-03-16 15:31:00
Bbb|2022-03-16|4567|2022-03-16 16:13:28
Bbb|2022-03-16|7890|2022-03-16 15:31:00
Bbb|2022-03-16|7890|2022-03-16 16:13:28
CCC|2021-09-12|2345|2021-09-12 08:01:48
CCC|2021-09-12|5486|2021-09-12 08:02:38

我的任务是1)按地点和日期分组,如果有一个以上的唯一ID,则检查是否所有的事件_日期时间都相同。这可以在小时和分钟级别完成,不需要包括秒。结果可能在新列Check中,该列的值可能为“是”和“否”。

例如,团体地点‘bbb’和日期‘2022-03-16’,有两个ID,‘4567’,‘7890’。我们可以看到这两个ID具有相同的EVENT_DATETIME‘2022-03-16 15:31:00’、‘2022-03-16 16:13:28’。因此,最后一列Check应该说是。

然而,对于组‘ccc’和日期‘2021-09-12’,ID的EVENT_DATETIME不同,因此check列应该为no。

最终输出:
Place|Dates|id|Event_Datetime|勾选
-|
AAA|2022-01-03|1234|2022-01-03 14:42:56|否
Bbb|2022-03-16|4567|2022-03-16 15:31:00|是
Bbb|2022-03-16|4567|2022-03-16 16:13:28|是
Bbb|2022-03-16|7890|2022-03-16 15:31:00|是
Bbb|2022-03-16|7890|2022-03-16 16:13:28|是
Ccc|2021-09-12|2345|2021-09-12 08:01:48|否
Ccc|2021-09-12|5486|2021-09-12 08:02:38|否

我很感激任何帮助或建议。

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', 
                 '2345'],
     '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:01:48']
    }
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
nsc4cvqm

nsc4cvqm1#

pandas.DataFrame.groupbyduplicated一起使用的一种方法:

cols = ["Place", "id"]
m = df.groupby(cols)["event_datetime"].agg(set).duplicated(keep=False)
new_df = df.merge(m.rename("Check"), left_on=cols, right_index=True)
print(new_df)

产出:

Place       dates    id       event_datetime  Check
0   aaa  2022-01-03  1234  2022-01-03 14:42:56  False
1   bbb  2022-03-16  4567  2022-03-16 15:31:00   True
2   bbb  2022-03-16  4567  2022-03-16 16:13:28   True
3   bbb  2022-03-16  7890  2022-03-16 15:31:00   True
4   bbb  2022-03-16  7890  2022-03-16 16:13:28   True
5   ccc  2021-09-12  2345  2021-09-12 08:01:48  False
6   ccc  2021-09-12  5486  2021-09-12 08:02:38  False

相关问题