python - 使用字符串列表或字典根据数据框中的现有列创建新列
问题描述
我目前在我的数据框中的一列中有一组值。这些值没有特定的模式,并且在大多数情况下是随机的,但我想设置自己的字典或列表,因此如果字符串包含这些值,我可以创建一个新列来匹配这些关键字。我来自 R 背景,所以我之前所做的是创建一个 for 循环,用 grepl 解包 a 列表。
假设我有字典:
我的字典:
my_dict = {"BC": "Vancouver", "AB": "Calgary", "SK": ["Regina","Saskatoon"], "MB": ["Winnipeg","Brandon"], "ON":["Toronto","Ottawa"]}
本质上,我想要的是如果字符串匹配,然后使用字典的键。此外,如果他们碰巧不匹配或字典中未列出密钥,则将输入“其他”。这是我想看到的。
东风:
df = pd.DataFrame({"Name": ["Jordan","Paul","Adrian","Sarah","Becky","Shawn"], "City":["Vancouver - Lower Mainland","Calgary/Lethbridge","Regina / Moose Jaw","Brandon","Ottawa_Hamilton","Montreal"],
"Province_Fixed": ["BC","AB","SK","MB","ON","Other"]})
“Provinced_Fixed”列将是输出。我想知道哪种方法是解决这个问题的最佳方法。为了这个问题,我只是给了一本字典,它不需要以这种方式完成。非常感谢!我非常感激。
解决方案
Lopp 按字典值创建新列,所有行都匹配 by str.contains
,对于list
s 也是必要的,将值连接到一个字符串 by|
正则表达式OR
:
for k, v in my_dict.items():
pat = '|'.join(v) if isinstance(v, list) else v
df.loc[df['City'].str.contains(pat) , 'new'] = k
df['new'] = df['new'].fillna('Other')
print (df)
Name City Province_Fixed new
0 Jordan Vancouver - Lower Mainland BC BC
1 Paul Calgary/Lethbridge AB AB
2 Adrian Regina / Moose Jaw SK SK
3 Sarah Brandon MB MB
4 Becky Ottawa_Hamilton ON ON
5 Shawn Montreal Other Other
推荐阅读
- macros - 带有逐字或列表的 LaTeX 新命令:`#` 问题(哈希键)
- php - 在 PHP ImageMagick 扩展中添加图像周围的白框
- ms-office - 使用 getFileAsync(fileType, options, callback) 在本地保存 .docx 或 .ppt 文件
- scala - 运行时评估函数不能很好地与 Spark 数据集/RDD 配合使用
- reactjs - 如何访问子组件中的 this.props.location?
- ios - 从 ARReferenceImage 获取 UIImage 或 CIImage
- c# - 并行使用 DbContext
- angular - 在Angular中上传图像后如何重置文件输入表单?
- android - Android GridLayoutManager 均匀行距
- javascript - 添加越来越多
问题。如果一个人被改变,它会改变所有的人