按Street分组判断Crime列是否含Y并新增Flag列的实现方法
需求实现方案
核心逻辑:先按Street字段分组,判断每个分组内是否至少存在1条Crime为"Y"的记录,将判断结果映射为Y/N后回填到该分组的所有行即可。
1. SQL 实现
使用窗口函数直接生成分组聚合结果,无需额外关联:
SELECT ID, Street, `street type`, Crime, -- 同一Street分组下只要有一个Y,MAX结果就是Y,否则为N MAX(Crime) OVER (PARTITION BY Street) AS Flag FROM 你的表名 ORDER BY ID;
如果需要忽略Street的大小写差异,可以将分组字段替换为UPPER(Street)或者LOWER(Street)。
2. Python Pandas 实现
两种常用写法,逻辑和SQL一致:
import pandas as pd # 写法1:直观判断分组内是否存在Y df['Flag'] = df.groupby('Street')['Crime'].transform(lambda x: 'Y' if 'Y' in x.values else 'N') # 写法2:利用字符串大小比较简化写法('Y'的字符序大于'N') df['Flag'] = df.groupby('Street')['Crime'].transform('max')
3. Excel 实现
假设原始数据第一行是表头,数据从第2行开始:Street列为B列、Crime列为D列,新增Flag为E列,在E2单元格输入公式后下拉填充即可:
=IF(COUNTIFS(B:B,B2,D:D,"Y")>0,"Y","N")
内容的提问来源于stack exchange,提问作者user35131
相关产品推荐
相关产品推荐

