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

Pandas DataFrame按条件将D、E列值同步赋值到A、B列的方案咨询

Pandas 多列批量赋值问题解决方案

原代码错误原因

  • 自定义函数返回值不符合要求:仅返回了列名嵌套列表,没有取当前行对应列的实际值,且未处理C列值不等于cc的场景,会返回None导致赋值失败
  • 多列选择语法错误:df[['A'],['B']] 不是合法的多列索引写法,正确写法为df[['A','B']]

可行方案1:自定义函数+apply实现

import pandas as pd

def func(row):
    if row['C'] == 'cc':
        # 符合条件返回D、E列的当前行值,替换A、B
        return pd.Series([row['D'], row['E']])
    else:
        # 不符合条件返回原A、B值,不修改
        return pd.Series([row['A'], row['B']])

df[['A', 'B']] = df.apply(func, axis=1)

可行方案2:向量化操作(性能更优,推荐大数据量使用)

无需自定义函数,直接通过布尔掩码批量赋值,效率远高于逐行apply:

# 生成C列值为cc的行掩码
mask = df['C'] == 'cc'
# 批量替换对应行的A、B列值
df.loc[mask, 'A'] = df.loc[mask, 'D']
df.loc[mask, 'B'] = df.loc[mask, 'E']

效果验证

构造测试数据运行:

df = pd.DataFrame({
    'A': ['aa', 'aa', 'aa'],
    'B': ['bb', 'bb', 'bb'],
    'C': ['cc', None, 'cc'],
    'D': ['dd1', 'dd2', 'dd3'],
    'E': ['ee1', 'ee2', 'ee3']
})
# 执行上述赋值代码后输出
print(df)

输出结果:

A    B     C    D    E
0  dd1  ee1    cc  dd1  ee1
1   aa   bb  None  dd2  ee2
2  dd3  ee3    cc  dd3  ee3

完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:36:05