如何使用Python/Pandas从另一个df中提取日期范围最接近记录的1条相关记录?

如何使用Python/Pandas从另一个df中提取日期范围最接近记录的1条相关记录?,python,python-3.x,pandas,dataframe,csv,Python,Python 3.x,Pandas,Dataframe,Csv,我正在使用Pandas/Python中的2个数据帧,并将其作为CSV加载- “用户”-包含带有ID(非索引)的注册日期和更多信息(同一用户的多个可能存在多年) “条目”-包含其条目的日期以及与用户ID一致的ID(不是索引) 我需要能够找到实例,其中一个条目在用户开始日期的1年内,但可能有许多用户到许多条目日期,我需要找到每个条目最接近开始日期的日期 我已经尝试过pd.merge_asof(),但有点卡住了,不知道在这种情况下如何使用它。我在两个数据框(用户,条目)中都为日期创建了一个新列,标题为

我正在使用Pandas/Python中的2个数据帧,并将其作为CSV加载-

“用户”-包含带有ID(非索引)的注册日期和更多信息(同一用户的多个可能存在多年)

“条目”-包含其条目的日期以及与用户ID一致的ID(不是索引)

我需要能够找到实例,其中一个条目在用户开始日期的1年内,但可能有许多用户到许多条目日期,我需要找到每个条目最接近开始日期的日期

我已经尝试过pd.merge_asof(),但有点卡住了,不知道在这种情况下如何使用它。我在两个数据框(用户,条目)中都为日期创建了一个新列,标题为“days_After_today”,它是今天的日期减去作为整数跟踪的日期,我认为这对于这里的比较很有用,只是不完全确定如何实现它

我的预期输出是寻找用户注册日期的条目在一年之前(但不是之后)的实例,并合并这些单元格


请给我一些建议好吗?

假设
用户
有一个唯一的注册日期,我们可以将日期映射到
条目
数据框,然后通过匹配年份进行过滤

接下来,我们可以应用一个
groupby
,并在该年内按每个用户的输入日期返回最低索引

df1=用户
df2=条目

df1['reg_date'] = pd.to_datetime(df1['reg_date'])

df2['entry_date'] = pd.to_datetime(df2['entry_date'])

df2['reg_date'] = df2['ID'].map(df1.set_index('ID')['reg_date'])

idx = df2[df2['entry_date'].dt.year == df2['reg_date'].dt.year]\
                           .groupby('ID')['entry_date'].idxmin()


df2.loc[idx]

   nac   ID  age description  days_since_today entry_date   reg_date
0   14  4EF   33   something                 4 2019-01-05 2019-01-07

请展示您的数据样本和预期输出。请参阅和,以获取更多有关SO问题规则的信息,更新!
    nac ID  age description days_since_today entry_date
0   14  4EF 33  something   4                 01/05/2019
2   2   4AA 33  something   320                 01/07/2016
4   1   8SD 33  something   400                 01/01/2019
df1['reg_date'] = pd.to_datetime(df1['reg_date'])

df2['entry_date'] = pd.to_datetime(df2['entry_date'])

df2['reg_date'] = df2['ID'].map(df1.set_index('ID')['reg_date'])

idx = df2[df2['entry_date'].dt.year == df2['reg_date'].dt.year]\
                           .groupby('ID')['entry_date'].idxmin()


df2.loc[idx]

   nac   ID  age description  days_since_today entry_date   reg_date
0   14  4EF   33   something                 4 2019-01-05 2019-01-07