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

PySpark中如何基于某列存在特定值时为所有行设置新列值?

问题描述

我有如下输入DataFrame:

|sequence|company_number|errorCode|errorType|isDropped|
+--------+--------------+---------+---------+---------+
| 9999999|      XXXXXXXX| OADL0002|   FILERJ|        N|
|    8487|      YYYYYYYY| OADL0003|       RJ|        Y|
|    8487|      XXXXXXXX| OADL0004|       RJ|        Y|
|    8487|      YYYYYYYY| OADL0006|       RJ|        Y|
|    8486|      ZZZZZZZZ| OADL0007|       RJ|        Y|
|    8487|      YYYYYYYY| OADL0005|       RJ|        Y|
|    8486|      ZZZZZZZZ| OADL0008|       RJ|        Y|

需求是新增Dropped列:只要DataFrame里任意一行的errorType值为FILERJ,所有行的Dropped列都设为Y。期望输出如下:

|sequence|company_number|errorCode|errorType|isDropped|Dropped|
+--------+--------------+---------+---------+---------+-------+
| 9999999|      XXXXXXXX| OADL0002|   FILERJ|        N|      Y|
|    8487|      YYYYYYYY| OADL0003|       RJ|        Y|      Y|
|    8487|      XXXXXXXX| OADL0004|       RJ|        Y|      Y|
|    8487|      YYYYYYYY| OADL0006|       RJ|        Y|      Y|
|    8486|      ZZZZZZZZ| OADL0007|       RJ|        Y|      Y|
|    8487|      YYYYYYYY| OADL0005|       RJ|        Y|      Y|
|    8486|      ZZZZZZZZ| OADL0008|       RJ|        Y|      Y|
解决方案

用Pandas可以快速实现这个需求,步骤很简单:

  1. 先判断整个DataFrame里有没有errorType等于FILERJ的行;
  2. 根据判断结果给所有行的Dropped列统一赋值。

具体代码如下:

import pandas as pd

# 构造输入数据
data = {
    'sequence': [9999999, 8487, 8487, 8487, 8486, 8487, 8486],
    'company_number': ['XXXXXXXX', 'YYYYYYYY', 'XXXXXXXX', 'YYYYYYYY', 'ZZZZZZZZ', 'YYYYYYYY', 'ZZZZZZZZ'],
    'errorCode': ['OADL0002', 'OADL0003', 'OADL0004', 'OADL0006', 'OADL0007', 'OADL0005', 'OADL0008'],
    'errorType': ['FILERJ', 'RJ', 'RJ', 'RJ', 'RJ', 'RJ', 'RJ'],
    'isDropped': ['N', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y']
}
df = pd.DataFrame(data)

# 检查是否存在errorType为FILERJ的记录
has_filerj = df['errorType'].eq('FILERJ').any()

# 新增Dropped列,统一赋值
df['Dropped'] = 'Y' if has_filerj else 'N'

# 打印结果
print(df)

执行这段代码后,输出的DataFrame就会和期望的一致,所有行的Dropped列都为Y。如果输入数据里没有FILERJ的记录,Dropped列会统一设为N,适配两种场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 09:57:48