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

如何使用列表更新Pandas DataFrame中的多行数据?

实现Pandas DataFrame按指定匹配条件更新列值

初始数据与需求

初始DataFrame结构与数据:

A  B  C
0  1  a  F
1  2  b  F
2  3  c  F
3  4  d  F
4  5  e  F

需要根据列表names=['a', 'd', 'e']匹配B列元素,将对应列表values=['T', 'T', 'G']的值替换到C列,最终得到目标DataFrame。

实现方法

首先构建初始DataFrame及定义所需列表:

import pandas as pd

# 构建初始DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5],
    'B': ['a', 'b', 'c', 'd', 'e'],
    'C': ['F'] * 5
})

names = ['a', 'd', 'e']
values = ['T', 'T', 'G']

方法一:字典映射 + loc精准更新

这是常用且高效的方式,通过字典建立匹配关系后筛选目标行更新:

# 将names和values转为键值对映射字典
replace_map = dict(zip(names, values))
# 筛选B列在names中的行,更新对应C列的值
df.loc[df['B'].isin(names), 'C'] = df.loc[df['B'].isin(names), 'B'].map(replace_map)

先用isin定位需要更新的行,再通过map将B列的匹配值映射为对应新值,直接赋值给C列的目标行,不会改动其他行的C值。

方法二:apply逐行判断替换

逻辑直观,适合新手理解:

replace_map = dict(zip(names, values))
# 逐行判断,匹配则替换,否则保留原值
df['C'] = df.apply(lambda row: replace_map[row['B']] if row['B'] in replace_map else row['C'], axis=1)

通过apply遍历每一行,检查当前行B列的值是否在映射字典中,是则替换C列值,否则保留原C值。

方法三:numpy.where向量式替换

适合大数据量场景,向量化操作比逐行遍历效率更高:

import numpy as np

replace_map = dict(zip(names, values))
# 向量式条件判断,批量更新
df['C'] = np.where(df['B'].isin(names), df['B'].map(replace_map), df['C'])

np.where批量处理所有行,第一个参数是判断条件(B列值在names中),第二个参数是满足条件时的替换值,第三个参数是不满足条件时的原值。

最终结果

执行任意一种方法后,DataFrame都会变为:

A  B  C
0  1  a  T
1  2  b  F
2  3  c  F
3  4  d  T
4  5  e  G

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:52:44