如何透视数据查找指定列唯一值 分组生成标记列并去重
Pandas 分组存在性标记实现方案
直接使用groupby聚合即可完成需求,不需要额外做pivot操作,步骤如下:
- 首先构造原始测试数据
import pandas as pd df = pd.DataFrame( [ [1, "Y", "G", "CA", "DA", "EA"], [2, "Y", "G", "CA", "DA", "EA"], [3, "Y", "G", "CA", "DA", "EA"], [1, "X", "Q", "RA", "DA", "EA"], [2, "X", "Q", "CA", "DA", "EA"], ], columns=["ID", "col1", "col2", "col3", "col4", "col5"] )
- 按指定字段分组,聚合时直接判断目标值是否存在
# 分组维度字段 group_keys = ["ID", "col3", "col4", "col5"] res = df.groupby(group_keys, as_index=False).agg( col1_X=("col1", lambda s: "Y" if "X" in s.values else "N"), col1_Y=("col1", lambda s: "Y" if "Y" in s.values else "N"), col2_G=("col2", lambda s: "Y" if "G" in s.values else "N"), col2_Q=("col2", lambda s: "Y" if "Q" in s.values else "N") )
逻辑说明
groupby会自动按指定字段组合去重,天然满足消除重复行的要求- 聚合函数直接遍历每个分组的对应列,判断目标枚举值是否存在,存在返回
Y,不存在返回N,直接生成需要的4个衍生列 - 运行后输出结果和预期完全一致:
| ID | col3 | col4 | col5 | col1_X | col1_Y | col2_G | col2_Q |
|---|---|---|---|---|---|---|---|
| 1 | CA | DA | EA | Y | Y | Y | Y |
| 1 | RA | DA | EA | Y | Y | Y | Y |
| 2 | CA | DA | EA | Y | Y | Y | Y |
| 3 | CA | DA | EA | N | Y | Y | N |
如果后续col1、col2新增其他枚举值,只需要在agg方法中追加对应的判断规则即可,不需要调整整体逻辑。
内容的提问来源于stack exchange,提问作者BKB
相关产品推荐
相关产品推荐

