如何基于ID关联从另一DataFrame获取对应ID的最新Value值
实现方案
核心思路是先从df1中提取每个ID对应最新日期的Value值,再匹配到df2中即可,具体代码和步骤如下:
- 第一步:将df1的Date列转换为标准日期格式,避免字符串比对出现日期判断错误
import pandas as pd # 若已经构造好df1、df2可跳过下面的样本数据构造代码 df1 = pd.DataFrame({ 'ID': [9560, 9560, 9712, 9712, 9920], 'Date': ['07/3/2021', '03/03/2021', '12/15/2021', '08/30/2021', '4/11/2021'], 'Value': [25, 20, 15, 10, 5] }) df2 = pd.DataFrame({ 'ID': [9560, 9712, 9920], 'Value': [None, None, None] }) # 转换日期格式,匹配月/日/年的输入格式 df1['Date'] = pd.to_datetime(df1['Date'], format='%m/%d/%Y')
- 第二步:提取每个ID对应最新日期的Value映射关系
# 方案1:先按日期升序排序,分组后取每组最后一个值即为最新值,逻辑直观易读 latest_value_map = df1.sort_values('Date').groupby('ID')['Value'].last() # 方案2:直接定位每组日期最大的行提取Value,不需要全局排序,数据量大时效率更高 latest_value_map = df1.loc[df1.groupby('ID')['Date'].idxmax()].set_index('ID')['Value']
- 第三步:将Value值映射填充到df2的对应列
df2['Value'] = df2['ID'].map(latest_value_map)
执行完成后输出df2即可得到你需要的预期结果。
内容的提问来源于stack exchange,提问作者Sriram
相关产品推荐
相关产品推荐

