Python技术求助:基于DataFrame多列值添加前缀列的实现
解决Pandas新增前缀列的问题
嘿,作为Python新手不用慌,这个需求用Pandas配合Numpy就能轻松搞定!我先帮你理清楚逻辑,再给你直接能用的代码~
需求拆解
你想要根据Identifier 1和Identifier 2的非空情况,给New Column加不同前缀:
- 如果
Identifier 1有值 → 加对应前缀(比如ID1-)+ 该列的值 - 如果
Identifier 1为空,但Identifier 2有值 → 加对应前缀(比如ID2-)+ 该列的值 - 两列都为空 → 加另一类前缀(比如
NO-ID-)+ 公司编号
代码实现
先构造你的原始数据(注意如果你的空值是空白字符串而非NaN,后面稍微调整判断条件就行),然后用np.select来批量处理:
import pandas as pd import numpy as np # 构建你提供的原始DataFrame df = pd.DataFrame({ "Company number": [123456, 987656, 123987], "Identifier 1": [11, np.nan, 876324], "Identifier 2": [np.nan, 47861, 78172] }) # 定义判断条件和对应的结果 conditions = [ # 优先判断Identifier1是否非空 df["Identifier 1"].notna(), # 其次判断Identifier2是否非空 df["Identifier 2"].notna() ] choices = [ # 对应第一个条件的前缀+值 "ID1-" + df["Identifier 1"].astype(str), # 对应第二个条件的前缀+值 "ID2-" + df["Identifier 2"].astype(str) ] # 生成新列,默认情况(两列都空)用自定义前缀+公司号 df["New Column"] = np.select(conditions, choices, default="NO-ID-" + df["Company number"].astype(str)) # 查看结果 print(df)
结果展示
运行后你会得到目标结构的DataFrame:
| Company number | Identifier 1 | Identifier 2 | New Column |
|---|---|---|---|
| 123456 | 11.0 | NaN | ID1-11.0 |
| 987656 | NaN | 47861.0 | ID2-47861.0 |
| 123987 | 876324.0 | 78172.0 | ID1-876324.0 |
小调整提示
- 如果你的空值是空白字符串(不是NaN),把代码里的
.notna()改成!= ""即可 - 前缀可以完全自定义,比如把
ID1-改成你需要的任何标识,NO-ID-也可以换成其他内容 - 如果想在两列都有值时做特殊处理(比如同时显示两个ID),可以再加一个条件放在最前面
内容的提问来源于stack exchange,提问作者Phobos
相关产品推荐
相关产品推荐

