繁体   English   中英

当 df2 中的日期早于 df1 中的日期时,如何检查 df1 中的 id 是否存在于 df2 中,并使用 pandas 相应地添加新列

[英]how to check whether the id in df1 existed in df2 when date in df2 is older than date in df1 and add new column accordingly using pandas

我有两个数据集分配给 pandas 数据帧 DF1、DF2。 一个与历史客户交易 (DF2) 和另一个与其他客户活动 (DF1),我需要首先在 DF2 中仅保留第一次出现以避免任何错误,然后将 ['existed_before'] 列添加到 DF1,输入为 True/False在比较两个数据框中的 ID 和日期之后。 我想到的逻辑类似于以下内容:如果 DF1['id'] == to DF2['ID'] and DF1['date'] > DF2['date'] then True,否则它应该是 False或 Nan,以防 DF2 中根本不存在 ID。

下面是所需 output 的演示,*注意:代码应同时考虑 id 和完整日期(包括小时/分钟/秒)。 此外,一个 ID 可能在两个数据帧中重复多次。

df1:
身份证日期
1 19-01-2021 00:13:48
2 2021 年 4 月 3 日 06:23:21
3 06-05-2021 08:44:00
3 23-11-2021 23:18:18
4 2021 年 15 月 12 日 03:20:13

df2:
身份证日期
1 25-01-2021 00:00:35
2 2021 年 8 月 3 日 07:25:21
3 18-03-2021 03:41:40

df1:
id 日期 first_time
1 2021 年 1 月 19 日 00:13:48 错误
2 2021 年 4 月 3 日 06:23:21 真
3 2021 年 6 月 5 日 08:44:00 错误
3 23-11-2021 23:18:18 真
4 2021 年 15 月 12 日 03:20:13 南

我在带有帮助列的merge_asof中得到了不同的输出:

df1['date'] = pd.to_datetime(df1['date'], dayfirst=True)
df2['date'] = pd.to_datetime(df2['date'], dayfirst=True)

# df1 = df1.sort_values('date')
# df2 = df2.sort_values('date')

df = pd.merge_asof(df1, 
                    df2.assign(first_time=True), 
                    on='date', 
                    by='id', 
                    allow_exact_matches=False)

df['first_time'] = (df['first_time'].fillna(False)
                                    .astype('boolean')
                                    .where(df['id'].isin(df2['id']))
print (df)
   id                date  first_time
0   1 2021-01-19 00:13:48       False
1   2 2021-03-04 06:23:21       False
2   3 2021-05-06 08:44:00        True
3   3 2021-11-23 23:18:18        True
4   4 2021-12-15 03:20:13        <NA>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM