【问题标题】:how to check whether a customer id in df1 existed before that date in df2 using pandas如何使用熊猫检查 df1 中的客户 ID 在 df2 中的该日期之前是否存在
【发布时间】:2021-12-29 12:54:08
【问题描述】:

我有两个数据集分配给熊猫数据框 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完全没有。

下面是所需输出的演示, *注意:代码应同时考虑 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 15-12-2021 03:20:13

df2:
身份证日期
1 19-01-2021 00:13:48
2 2021 年 2 月 1 日 09:27:23
3 06-05-2021 08:44:00

df1:
id 日期存在_之前
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 15-12-2021 03:20:13 NaN

【问题讨论】:

  • 所以每个ID只有一个日期? df1 和 df2 都适用吗?
  • 没有实际上在 df1 和 df2 中有重复的 ID。我想创建一个只有第一次出现日期的 df3 以避免潜在的错误。

标签: python pandas dataframe date


【解决方案1】:

我在 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        True
2   3 2021-05-06 08:44:00       False
3   3 2021-11-23 23:18:18        True
4   4 2021-12-15 03:20:13        <NA>

【讨论】:

  • 没有真正显示我正在寻找的答案,我的想法是我想知道在 DF1 中的日期/时间之前是否有该客户在 DF2 中的历史数据,我修改了问题和数据示例希望让它更清楚。
  • @rfengineer - 答案已按需要进行编辑和工作,因为您在实际数据中不起作用?
  • 非常感谢!我检查了一下,它满足了我的数据样本的要求,但我必须随机检查更大的数据集。再次感谢
猜你喜欢
  • 1970-01-01
  • 2020-08-10
  • 2021-11-04
  • 2019-07-06
  • 2021-04-26
  • 2018-10-14
  • 2015-12-17
  • 2016-02-15
  • 1970-01-01
相关资源
最近更新 更多