基于DataFrame的ID字段条件创建新Keyword列的技术需求
为DataFrame新增Keyword列的实现方案
原始数据与需求
我们有如下结构的DataFrame df:
| Name | cost | ID |
|---|---|---|
| john | 300.0 | A1 |
| ram | 506.0 | B2 |
| sam | 300.0 | C4 |
| Adam | 289.0 | 1 |
需要生成包含Keyword列的输出结果,格式如下:
| Name | cost | ID | Keyword |
|---|---|---|---|
| john | 300 | A1 | RF |
| ram | 506 | B2 | DD |
| sam | 300 | C4 | RF |
| Adam | 289 | 1 | Shared |
规则说明
- 若ID为整数值(含字符串形式的整数),Keyword列值为
Shared - ID为
A1或C4时,Keyword为RF - ID为
B2时,Keyword为DD
实现代码
1. 构造原始DataFrame(用于测试)
import pandas as pd data = { 'Name': ['john', 'ram', 'sam', 'Adam'], 'cost': [300.0, 506.0, 300.0, 289.0], 'ID': ['A1', 'B2', 'C4', '1'] } df = pd.DataFrame(data)
2. 新增Keyword列
方式一:分步处理
# 定义非整数ID的映射关系 id_keyword_map = {'A1': 'RF', 'B2': 'DD', 'C4': 'RF'} # 先通过映射赋值Keyword列 df['Keyword'] = df['ID'].map(id_keyword_map) # 判断ID是否为整数的辅助函数 def is_integer_id(id_str): try: int(id_str) return True except ValueError: return False # 对整数ID的行设置Keyword为Shared df.loc[df['ID'].apply(is_integer_id), 'Keyword'] = 'Shared'
方式二:简洁的numpy.where写法
import numpy as np id_keyword_map = {'A1': 'RF', 'B2': 'DD', 'C4': 'RF'} df['Keyword'] = np.where( df['ID'].apply(lambda x: x.isdigit()), 'Shared', df['ID'].map(id_keyword_map) )
3. 可选:将cost列转为整数类型
如果需要匹配输出格式中的整数cost:
df['cost'] = df['cost'].astype(int)
最终结果
执行代码后,输出的DataFrame为:
Name cost ID Keyword 0 john 300 A1 RF 1 ram 506 B2 DD 2 sam 300 C4 RF 3 Adam 289 1 Shared
内容的提问来源于stack exchange,提问作者KRANTHI KUMAR
相关产品推荐
相关产品推荐

