根据列取值将符合条件的列名拼接生成新数据列
实现方案
基于Python的Pandas库可以高效实现这个需求,无需手写逐行遍历循环,代码可维护性更高。
首先构造和示例一致的测试数据:
import pandas as pd df = pd.DataFrame({ 'id': [1, 2, 3, 4, 5, 6], 'col1': [0, 1, 0, 1, 2, 0], 'col2': [1, 2, 1, 1, 2, 1] })
核心处理逻辑如下,先指定需要参与值校验的列范围,再分别匹配值为1、2的列名做拼接:
# 所有需要做值判断的列,后续新增判断列直接往这个列表加即可 check_columns = ['col1', 'col2'] # 生成ones列:收集当前行值为1的列名,用逗号+空格拼接 df['ones'] = df[check_columns].apply( lambda x: ', '.join([col for col in check_columns if x[col] == 1]), axis=1 ) # 生成twos列:收集当前行值为2的列名,用逗号+空格拼接 df['twos'] = df[check_columns].apply( lambda x: ', '.join([col for col in check_columns if x[col] == 2]), axis=1 )
运行后输出的结果和预期完全匹配:
| id | col1 | col2 | ones | twos |
|---|---|---|---|---|
| 1 | 0 | 1 | col2 | |
| 2 | 1 | 2 | col1 | col2 |
| 3 | 0 | 1 | col2 | |
| 4 | 1 | 1 | col1, col2 | |
| 5 | 2 | 2 | col1, col2 | |
| 6 | 0 | 1 | col2 |
- 拼接分隔符可以按需调整,比如不需要逗号后的空格,直接把
', '.join改成','.join即可 - 无匹配值的行会自动留空,不需要额外做判空处理
- 百万行级别的超大数据集可以替换为numpy向量化实现,常规业务数据量下上面的写法可读性更好,性能完全够用
内容的提问来源于stack exchange,提问作者Charbel
相关产品推荐
相关产品推荐

