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

如何使用Pandas遍历列唯一值,检查另一列并生成新列?

实现思路与代码方案

方案一:补全你现有循环逻辑

你已经拿到了ID的唯一值列表,接下来可以通过以下步骤完成需求:

  • 创建字典存储每个ID是否存在Status为'A'的判断结果
  • 遍历每个唯一ID,筛选对应行并检查是否包含'A'
  • 用map将字典映射到原DataFrame的ID列,生成新列

补全后的代码:

def function(df):
    id_list = df['ID'].unique()
    id_has_a = {}
    for i in id_list:
        # 筛选当前ID的所有行,判断是否存在Status为'A'的记录
        has_a = (df[df['ID'] == i]['Status'] == 'A').any()
        id_has_a[i] = 'YES' if has_a else 'NO'
    # 生成新列
    df['Result A?'] = df['ID'].map(id_has_a)
    return df

方案二:更高效的Pandas原生方法(推荐)

手动循环在处理大数据量时效率较低,推荐使用Pandas的groupby+transform实现向量化操作,代码更简洁且性能更好:

def function(df):
    # 按ID分组,对每组的Status列判断是否存在'A',并将结果广播到组内每一行
    df['Result A?'] = df.groupby('ID')['Status'].transform(
        lambda group: 'YES' if (group == 'A').any() else 'NO'
    )
    return df

验证示例

假设原DataFrame为:

import pandas as pd
df = pd.DataFrame({
    'ID': [1, 1, 2, 2],
    'Status': ['A', 'B', 'B', 'C']
})

调用上述任意函数后,得到的结果如下:

IDStatusResult A?
1AYES
1BYES
2BNO
2CNO

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:01:22