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

如何在Pandas DataFrame中检测行内指定列的特定值并生成标记列?

解决Pandas DataFrame新增判断列的问题

嘿,我来帮你搞定这个需求!其实完全不用纠结.iterrows()或者.apply()的复杂写法,Pandas有更简洁高效的向量化操作,既能实现需求,又比逐行处理快得多。

方法一:精准匹配指定值

我们可以直接检查目标列中是否存在你指定的两个骨折描述,然后按行判断是否有任意一列符合条件,最后转成0/1的整数格式:

import pandas as pd

# 先构造你的原始DataFrame
data = {
    'name': ['Alice', 'Bob', 'Charles'],
    'age_5_9': ['no bones broken', 'no bones broken', 'no bones broken'],
    'age_10_14': ['no bones broken', 'broke 2 bones', 'no bones broken'],
    'age_15_19': ['broke 1 bone', 'no bones broken', 'no bones broken']
}
df = pd.DataFrame(data)

# 定义需要匹配的骨折值列表
broken_cases = ['broke 1 bone', 'broke 2 bones']

# 新增broke_a_bone列:检查每行的目标列是否有匹配值,转成整数
df['broke_a_bone'] = df[['age_5_9', 'age_10_14', 'age_15_19']].isin(broken_cases).any(axis=1).astype(int)

# 输出结果
print(df)

运行这段代码后,你就能得到想要的DataFrame:

nameage_5_9age_10_14age_15_19broke_a_bone
Aliceno bones brokenno bones brokenbroke 1 bone1
Bobno bones brokenbroke 2 bonesno bones broken1
Charlesno bones brokenno bones brokenno bones broken0

方法二:灵活匹配包含关键词的内容

如果以后可能出现更多类似的骨折描述(比如broke 3 bones),可以用字符串包含判断,只要列值里有broke就判定为骨折:

df['broke_a_bone'] = df[['age_5_9', 'age_10_14', 'age_15_19']].apply(lambda col: col.str.contains('broke')).any(axis=1).astype(int)

这里的.apply()是针对列的批量操作,比逐行遍历的.iterrows()效率高很多。

为什么不推荐.iterrows()?

.iterrows()是逐行遍历DataFrame,在数据量较大的时候会非常慢,而Pandas的向量化操作(比如.isin()、.str.contains())是基于numpy的底层实现,性能能提升几十甚至上百倍,所以优先用向量化方法哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 15:02:35