如何使用Python的.loc函数实现Excel VLOOKUP功能生成计算用DataFrame子集
实现Excel对应LOOKUP公式的Pandas解决方案
你需要实现的Excel公式IFERROR(LOOKUP(2,1/($D$1:D1=D2),$Q$1:Q1),0)的核心逻辑为:对每行数据,匹配当前行上方所有D列取值与当前行D列相等的记录,取最近一条的Q列值,无匹配则返回0。你可以直接用Pandas的内置向量化操作实现,不需要手动指定.loc的位置参数,处理大数据量时效率远高于手动循环。
示例代码
1. 导入依赖与构造测试数据
import pandas as pd # 示例DataFrame,仅保留核心的D、Q两列,你可以替换为自己的实际数据 df = pd.DataFrame({ 'D': ['品类1', '品类2', '品类1', '品类1', '品类2', '品类3'], 'Q': [10, 20, 30, 40, 50, 60] })
2. 核心实现(仅需1行代码)
# 计算结果存入new_Q列,可根据需求修改列名 df['new_Q'] = df.groupby('D')['Q'].shift(1).fillna(0).astype(int)
执行效果验证
运行后得到的DataFrame结果如下,和Excel公式的计算结果完全一致:
| 行号 | D | Q | new_Q |
|---|---|---|---|
| 0 | 品类1 | 10 | 0 |
| 1 | 品类2 | 20 | 0 |
| 2 | 品类1 | 30 | 10 |
| 3 | 品类1 | 40 | 30 |
| 4 | 品类2 | 50 | 20 |
| 5 | 品类3 | 60 | 0 |
代码逻辑说明
groupby('D'):将D列取值相同的行归为同一组,对应公式中筛选同D值记录的逻辑shift(1):取每组内当前行的上一行Q列值,对应取当前行上方最近匹配记录的逻辑fillna(0):每组第一行没有上一行数据时填充0,对应公式中IFERROR(...,0)的错误处理逻辑astype(int):可选,根据你的数据类型调整,保证输出格式符合预期
内容的提问来源于stack exchange,提问作者Awais Anwar
相关产品推荐
相关产品推荐

