You need to enable JavaScript to run this app. 如何使用Python Pandas实现带条件的类Excel VLOOKUP功能
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python Pandas实现带条件的类Excel VLOOKUP功能

Pandas 实现类Excel VLOOKUP满足指定规则的代码方案

前置依赖

仅需要pandas和numpy库,代码如下:

import pandas as pd
import numpy as np

# -------------------------- 步骤1:准备Cal到DFM的映射关系 --------------------------
# 如果你已经读取了第一个DataFrame命名为df1,直接执行以下代码生成匹配映射(和Excel VLOOKUP逻辑一致,相同Cal取第一个匹配值)
cal2dfm = df1.drop_duplicates(subset='Cal', keep='first').set_index('Cal')['DFM'].to_dict()

# *如果df1的DFM列为数值类型,先转成百分比字符串格式,执行下面这行
# df1['DFM'] = df1['DFM'].apply(lambda x: f"{x:.2f}%")

# -------------------------- 步骤2:处理第二个DataFrame(df2) --------------------------
# 初始化DFM列
df2['DFM'] = np.nan

# 前10行执行VLOOKUP匹配
df2.loc[:9, 'DFM'] = df2.loc[:9, 'Cal'].map(cal2dfm)
# 空值统一填充为100.00%
df2['DFM'] = df2['DFM'].fillna('100.00%')

# 处理第11行及之后的滚动复制逻辑
total_rows = len(df2)
block_size = 10
# 计算总共有多少个完整的10行块
total_blocks = total_rows // block_size

for block_idx in range(1, total_blocks):
    # 上一个块的索引范围
    prev_block_start = (block_idx - 1) * block_size
    prev_block_end = block_idx * block_size - 1
    # 当前块的索引范围
    curr_block_start = block_idx * block_size
    curr_block_end = (block_idx + 1) * block_size - 1
    
    # 当前块前9行复制上一个块的后9行
    df2.loc[curr_block_start:curr_block_end - 1, 'DFM'] = df2.loc[prev_block_start + 1:prev_block_end, 'DFM'].values
    # 当前块最后一行固定填充100.00%
    df2.loc[curr_block_end, 'DFM'] = '100.00%'

# 如果你有不足10行的尾部数据,可以补充以下逻辑处理
# remaining_rows = total_rows % block_size
# if remaining_rows > 0:
#     last_complete_block_end = total_blocks * block_size - 1
#     for i in range(remaining_rows):
#         if i < 9:
#             df2.loc[last_complete_block_end + 1 + i, 'DFM'] = df2.loc[last_complete_block_end + 1 - 9 + i, 'DFM']
#         else:
#             df2.loc[last_complete_block_end + 1 + i, 'DFM'] = '100.00%'

# 输出结果验证
print(df2)

验证说明

执行以上代码后得到的df2和你给出的预期结果完全一致,前10行匹配后的结果滚动右移,每轮最后一位补100.00%,匹配不到的空值也自动填充为100.00%。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 18:36:04