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

Python中DataFrame两列值匹配与Small List列对应行赋值

高效实现Pandas DataFrame列值匹配与赋值

问题分析

你需要将Small List列中的非0有效值,匹配到Big List列对应值的行,将这些行的Small List设为匹配值,其余行填0。核心是避免低效的逐行循环,利用Pandas的矢量化操作完成批量处理。

修正输入数据

首先你提供的代码中Small List的长度和Big List不匹配,会导致DataFrame创建失败,先修正输入:

import pandas as pd

data = {'Big List': [10, 20, 30, 40, 50, 60, 20], 
        'Small List': [20, 30, 60, 0, 0, 0, 0]}
df = pd.DataFrame(data)

高效实现方案

利用Pandas的isin()和where()方法完成矢量化赋值,这比iterrows()循环效率高几个数量级,尤其适合大数据集:

# 提取Small List中的非0有效值并去重
target_values = df[df['Small List'] != 0]['Small List'].unique()

# 批量赋值:Big List值在目标列表中则保留原值,否则设为0
df['Small List'] = df['Big List'].where(df['Big List'].isin(target_values), 0)

代码解释

  1. 提取目标值:筛选Small List中所有非0的值,用unique()去重减少重复判断,提升效率。
  2. 矢量化赋值:df['Big List'].isin(target_values)生成布尔数组,标记哪些行的Big List值在目标列表中;where()方法会将布尔值为True的行保留Big List的值,False的行设为0。

验证结果

执行后得到的DataFrame与你期望的输出完全一致:

Big ListSmall List
100
2020
3030
400
500
6060
2020

为什么不用循环?

iterrows()是逐行遍历处理,每一行都要单独操作,Pandas在处理大数据时会非常慢。而矢量化操作基于底层C语言实现,批量处理数据,效率提升显著。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:05:16