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

多DataFrame列值条件筛选及结果合并实现方法咨询

批量处理DataFrame列表生成value列

需求说明

对包含多个DataFrame的列表,按以下规则生成value列:

  • 若pgp值属于指定类别列表grp_list,且pgp与egp相等,value赋值为1
  • 若pgp值不属于grp_list,value赋值为2
  • 其余情况(pgp在列表中但与egp不等),value赋值为0

问题代码分析

原代码存在两处关键问题:

  • 变量名不一致:定义的是grp_list,但判断时误用group_list、group,会触发NameError
  • 直接对整个DataFrame用条件判断报错:i['pgp'].isin(...)返回布尔Series,无法直接作为if的判断条件,需用矢量化操作处理每一行

正确实现代码

import pandas as pd
import numpy as np

# 示例DataFrame
df1 = pd.DataFrame({
    'pgp': ['con', 'eco', 'dip', 'pol', 'god', 'ent'],
    'egp': ['con', 'eco', 'health', 'health', 'con', 'eco']
})
df2 = pd.DataFrame({
    'pgp': ['con', 'edu', 'pol', 'art'],
    'egp': ['con', 'edu', 'pol', 'art']
})
df_list = [df1, df2]  # 多个DataFrame组成的列表
grp_list = ['con', 'eco', 'dip', 'pol']  # 指定类别列表

# 批量处理每个DataFrame
for df in df_list:
    # 定义条件列表和对应赋值
    conditions = [
        (df['pgp'].isin(grp_list)) & (df['pgp'] == df['egp']),
        ~df['pgp'].isin(grp_list)
    ]
    values = [1, 2]
    # 未匹配条件的情况默认赋值0
    df['value'] = np.select(conditions, values, default=0)

# 查看处理后的df1结果
print(df1)

处理后示例结果(df1)

pgpegpvalue
concon1
ecoeco1
diphealth0
polhealth0
godcon2
enteco2

代码说明

  • 用numpy.select实现多条件矢量化赋值,比逐行循环效率更高
  • 按优先级定义条件:先匹配"pgp在列表且与egp相等"的情况,再匹配"pgp不在列表"的情况,剩余场景自动赋值0
  • 遍历DataFrame列表,批量为每个DataFrame添加value列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:20:29