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

如何对pandas DataFrame应用多条件规则为行分配多个分类并生成新列

Pandas DataFrame多分类标签匹配方案

实现思路

  • 预先定义分类标签与对应匹配规则的映射关系
  • 对每行数据遍历所有规则,收集全部匹配成功的标签,存入新增的Type列

方案1:行遍历实现(规则较多时编写更简便)

适合数据量不大、规则数量多的场景,代码逻辑直观易维护:

import pandas as pd

# 构造示例输入DataFrame
df = pd.DataFrame({
    'Name': ['Jai', 'Princi', 'Gaurav', 'Anuj'],
    'Height': [5.1, 6.2, 5.1, 5.2],
    'Qualification': ['Msc', 'MA', 'Msc', 'Msc']
})

# 定义规则:格式为(标签名, 匹配条件函数)
rules = [
    ('A', lambda row: row['Height'] < 6 and row['Qualification'] == 'Msc'),
    ('B', lambda row: row['Height'] < 5.2)
]

# 逐行匹配所有规则,生成Type列
df['Type'] = df.apply(
    lambda row: [tag for tag, condition in rules if condition(row)],
    axis=1
)

print(df)

输出结果和期望的完全一致。


方案2:向量化实现(大数据量场景性能更优)

避免逐行遍历的性能损耗,适合十万行及以上的数据集:

import pandas as pd

df = pd.DataFrame({
    'Name': ['Jai', 'Princi', 'Gaurav', 'Anuj'],
    'Height': [5.1, 6.2, 5.1, 5.2],
    'Qualification': ['Msc', 'MA', 'Msc', 'Msc']
})

# 先计算每个规则的布尔掩码(向量化运算,效率极高)
mask_a = (df['Height'] < 6) & (df['Qualification'] == 'Msc')
mask_b = df['Height'] < 5.2

# 初始化Type列为空列表
df['Type'] = [[] for _ in range(len(df))]

# 给匹配对应规则的行追加标签
df.loc[mask_a, 'Type'] = df.loc[mask_a, 'Type'].apply(lambda x: x + ['A'])
df.loc[mask_b, 'Type'] = df.loc[mask_b, 'Type'].apply(lambda x: x + ['B'])

print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:45:04