如何在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
相关产品推荐
相关产品推荐

