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

如何基于Pandas另一列的值替换指定列的数值

Pandas按条件修改DataFrame列值的实现方案

原始数据与需求

原始DataFrame定义

import pandas as pd
import numpy as np

data = {
        'id' : [1, 2, 3, 4],
        'name' : ['Foo', 'Bar', 'Baz', 'Buzz'],
        'symbol' : ['F', '.', 'Mx2', 'M']
       }

df = pd.DataFrame(data)

原始输出:

id  name    symbol
0   1   Foo     F
1   2   Bar     .
2   3   Baz     Mx2
3   4   Buzz    M

修改规则

需要按以下规则修改symbol列的值:

  • 当name等于Bar且symbol等于.时,将symbol改为F
  • 当name等于Baz且symbol等于Mx2时,将symbol改为M

期望结果

id  name    symbol
0   1   Foo     F
1   2   Bar     F
2   3   Baz     M
3   4   Buzz    M

实现方法

方法一:loc条件定位赋值

这是最直观的方式,通过布尔条件精准定位目标行,直接修改对应列的值:

# 处理第一个规则
df.loc[(df['name'] == 'Bar') & (df['symbol'] == '.'), 'symbol'] = 'F'
# 处理第二个规则
df.loc[(df['name'] == 'Baz') & (df['symbol'] == 'Mx2'), 'symbol'] = 'M'

方法二:嵌套np.where处理多条件

适合多分支条件场景,代码紧凑清晰:

df['symbol'] = np.where(
    (df['name'] == 'Bar') & (df['symbol'] == '.'),
    'F',
    np.where(
        (df['name'] == 'Baz') & (df['symbol'] == 'Mx2'),
        'M',
        df['symbol']
    )
)

方法三:掩码+replace组合

如果后续规则扩展较多,这种方式更易维护:

# 定义两个条件掩码
mask_bar = (df['name'] == 'Bar') & (df['symbol'] == '.')
mask_baz = (df['name'] == 'Baz') & (df['symbol'] == 'Mx2')

# 按掩码替换对应值
df.loc[mask_bar, 'symbol'] = df.loc[mask_bar, 'symbol'].replace('.', 'F')
df.loc[mask_baz, 'symbol'] = df.loc[mask_baz, 'symbol'].replace('Mx2', 'M')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:25:39