You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas实现类似Excel Vlookup的阈值匹配,查找最新日期

Pandas实现类似Vlookup的阈值匹配并获取最新日期

需要根据Table1中每个Name对应的Threshold1和Threshold2阈值,在Table2中查找该Name下Value等于对应阈值的最新Date,最终生成包含阈值及对应最新日期的结果表。

示例数据构造

import pandas as pd

# Table1 阈值表
table1 = pd.DataFrame({
    'Name': ['A', 'B'],
    'Threshold1': [9, 14],
    'Threshold2': [8, 13]
})

# Table2 日期-数值表
table2 = pd.DataFrame({
    'Date': ['1/1', '1/2', '1/3', '1/4', '1/5', '1/1', '1/2', '1/3', '1/4', '1/5'],
    'Name': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'],
    'Value': [10, 9, 9, 8, 8, 15, 14, 14, 13, 13]
})

解决方案

步骤1:提取每个Name-Value组合的最新日期

对Table2按Name和Value分组,取每组中最大的Date(即最新日期):

# 分组获取每个Name-Value对应的最新日期
latest_dates = table2.groupby(['Name', 'Value'])['Date'].max().reset_index()

步骤2:转换为宽格式匹配阈值列

将上述结果转换为宽格式,让每个阈值对应一列日期,方便后续与Table1合并:

# 转宽格式,给日期列添加阈值前缀
latest_dates_wide = latest_dates.pivot(
    index='Name',
    columns='Value',
    values='Date'
).add_prefix('Threshold').rename(columns=lambda x: x + '_Date')

步骤3:合并阈值表与日期表

将处理后的日期表和Table1合并,得到基础结果:

# 合并表,保留Table1所有列并添加对应日期列
result = table1.merge(latest_dates_wide, on='Name', how='left')

步骤4:调整列顺序与命名(匹配期望格式)

如果需要完全贴合期望的结果列顺序和命名,执行以下操作:

# 调整列顺序
result = result[['Name', 'Threshold1', 'Threshold9_Date', 'Threshold2', 'Threshold13_Date']]
# 重命名列名
result = result.rename(columns={
    'Threshold9_Date': 'Threshold1_Date',
    'Threshold13_Date': 'Threshold2_Date'
})

最终结果

调整后的result输出与期望一致:

Name  Threshold1 Threshold1_Date  Threshold2 Threshold2_Date
0    A           9             1/3           8             1/5
1    B          14             1/3          13             1/5

内容的提问来源于stack exchange,提问作者Elaine Yang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 09:25:41