PySpark:如何按ID判断Category列中是否存在Rose值
按ID判断是否包含Rose并新增标识列的实现方案
以下是几种常用工具的实现方法,根据你的使用场景选择:
Excel 实现步骤
- 提取唯一ID列表:复制原数据的
id列到空白列,选中该列后点击「数据」→「删除重复值」,得到每个唯一ID。 - 计算每个ID是否包含Rose:在唯一ID旁的单元格输入公式(假设原
id列是A列,Category列是B列,唯一ID列是D列):
下拉公式得到所有ID的标识结果。=IF(COUNTIFS($A:$A,D2,$B:$B,"Rose")>0,"Yes","No") - 匹配回原数据:在原数据的
Has_Rose列输入VLOOKUP公式,将步骤2的结果匹配到对应行:
($D:$E是唯一ID和标识结果的列范围)=VLOOKUP(A2,$D:$E,2,FALSE)
Python Pandas 实现代码
使用分组+transform方法,直接给每行添加标识:
import pandas as pd # 示例数据(替换为你的实际数据) df = pd.DataFrame({ 'id': [1, 1, 2, 2, 3], 'Category': ['Rose', 'Lily', 'Tulip', 'Rose', 'Daisy'] }) # 新增Has_Rose列,判断每个id分组是否包含Rose df['Has_Rose'] = df.groupby('id')['Category'].transform( lambda group: 'Yes' if 'Rose' in group.values else 'No' ) print(df)
运行后会得到每行对应的Has_Rose标识,结果如下:
| id | Category | Has_Rose |
|---|---|---|
| 1 | Rose | Yes |
| 1 | Lily | Yes |
| 2 | Tulip | Yes |
| 2 | Rose | Yes |
| 3 | Daisy | No |
SQL 实现语句
方法1:使用EXISTS子查询
SELECT id, Category, CASE WHEN EXISTS ( SELECT 1 FROM your_table t2 WHERE t2.id = t1.id AND t2.Category = 'Rose' ) THEN 'Yes' ELSE 'No' END AS Has_Rose FROM your_table t1;
方法2:使用COUNT窗口函数
SELECT id, Category, CASE WHEN COUNT(CASE WHEN Category = 'Rose' THEN 1 END) OVER (PARTITION BY id) > 0 THEN 'Yes' ELSE 'No' END AS Has_Rose FROM your_table;
内容的提问来源于stack exchange,提问作者sparc
相关产品推荐
相关产品推荐

