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

如何在Pandas DataFrame中合并同一筛选条件下的多列赋值操作?

Pandas:基于条件批量给多列赋值的方法

问题背景

我需要用Python Pandas处理DataFrame,基于pets列的值给两个新列添加数据。现有DataFrame定义如下:

import pandas as pd

d = {'names': ["john", "bob", "frank", "bill", "sam"],
     'pets': ["dog", "cat", "mouse", "horse", "bird"]}
DF = pd.DataFrame(data=d)

目前已经实现功能的两行代码是:

DF.loc[DF['pets']=="dog", 'color'] = 'red'
DF.loc[DF['pets']=="dog", 'ID'] = 1

希望将这两行合并为一条语句,简化代码。


解决方案

方法1:通过loc批量赋值最直接

直接在loc的列索引位置传入目标列名列表,然后一次性赋值对应的值:

# 列表形式赋值
DF.loc[DF['pets'] == "dog", ['color', 'ID']] = ['red', 1]

# 或者用字典形式,列名和值对应更直观
DF.loc[DF['pets'] == "dog", ['color', 'ID']] = {'color': 'red', 'ID': 1}

这种方法仅对满足条件的行赋值,未匹配的行新列会显示NaN,和原两行代码的效果完全一致。

方法2:用assign配合条件生成全列

如果需要给所有行的新列都设置值(不满足条件的行填充默认值,比如NaN),可以用assign结合numpy.where:

import numpy as np

DF = DF.assign(
    color=np.where(DF['pets'] == "dog", 'red', np.nan),
    ID=np.where(DF['pets'] == "dog", 1, np.nan)
)

这种方式会一次性生成两个新列,所有行都会被赋值,适合需要统一处理全列的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:32:49