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

基于条件实现Pandas中列间数据迁移与替换

Pandas DataFrame 按条件修改列值解决方案

需求

  • 当Result列值为'W'时,将对应行的Winning Odds值替换到Result列
  • 当Result列值为'L'或'P'(不区分大小写)时,将Result列值替换为-1

初始数据

import pandas as pd
data = {'Name':['Kauto Star', 'Denman', 'Frankel', 'Desert Orchid'], 'Result':['W', 'L', 'W', 'p'], 'Winning Odds': [4, 5, 6, 7]}
df = pd.DataFrame(data)

初始表格:

索引NameResultWinning Odds
0Kauto StarW4
1DenmanL5
2FrankelW6
3Desert OrchidP7

现有代码问题

尝试的代码逻辑完全错误,将非'W'的行直接替换为Winning Odds的值,不符合需求:

df['Result'] = np.where((df['Result'] == 'W'), df['Result'], df['Winning Odds'])

执行后错误结果:

索引NameResultWinning Odds
0Kauto StarW4
1Denman55
2FrankelW6
3Desert Orchid77

正确解法

方法1:嵌套np.where(简洁)

先统一Result列的大小写,避免小写'p'不匹配的问题,再用嵌套条件实现替换:

import numpy as np

# 统一大小写,避免大小写不一致导致的匹配失败
df['Result'] = df['Result'].str.upper()

# 嵌套条件完成替换
df['Result'] = np.where(
    df['Result'] == 'W', 
    df['Winning Odds'], 
    np.where(df['Result'].isin(['L', 'P']), -1, df['Result'])
)

方法2:loc分步处理(直观易读)

通过loc精准定位行和列,分步处理不同条件:

# 统一大小写
df['Result'] = df['Result'].str.upper()

# 替换W对应的Winning Odds值
df.loc[df['Result'] == 'W', 'Result'] = df.loc[df['Result'] == 'W', 'Winning Odds']

# 替换L/P为-1
df.loc[df['Result'].isin(['L', 'P']), 'Result'] = -1

最终结果

执行后得到符合期望的表格:

索引NameResultWinning Odds
0Kauto Star44
1Denman-15
2Frankel66
3Desert Orchid-17

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 00:52:29