如何使用Python/Pandas从另一个df中提取日期范围最接近记录的1条相关记录?
我正在使用Pandas/Python中的2个数据帧,并将其作为CSV加载- “用户”-包含带有ID(非索引)的注册日期和更多信息(同一用户的多个可能存在多年) “条目”-包含其条目的日期以及与用户ID一致的ID(不是索引) 我需要能够找到实例,其中一个条目在用户开始日期的1年内,但可能有许多用户到许多条目日期,我需要找到每个条目最接近开始日期的日期 我已经尝试过pd.merge_asof(),但有点卡住了,不知道在这种情况下如何使用它。我在两个数据框(用户,条目)中都为日期创建了一个新列,标题为“days_After_today”,它是今天的日期减去作为整数跟踪的日期,我认为这对于这里的比较很有用,只是不完全确定如何实现它 我的预期输出是寻找用户注册日期的条目在一年之前(但不是之后)的实例,并合并这些单元格如何使用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(),但有点卡住了,不知道在这种情况下如何使用它。我在两个数据框(用户,条目)中都为日期创建了一个新列,标题为
请给我一些建议好吗?假设
用户
有一个唯一的注册日期,我们可以将日期映射到条目
数据框,然后通过匹配年份进行过滤
接下来,我们可以应用一个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