python - 为数据框中的每一行生成一个代码
问题描述
我正在尝试为数据帧的每一行生成一个代码,这样,前 2 个字符是一个类别的代码,接下来的 3 个字符是一个子类别的代码,最后 3 个数字是那个的迭代数字子类别,例如 -
CTSCT001
CTSCT002
CTSCT003
我的代码看起来像这样 -
for sub_cat in dict_subcat_codes.keys():
i=1
for index, row in df[['Sub Category'] == sub_cat].iterrows():
row['Code'] = dict_cat_codes[row['Category']]+dict_subcat_codes[row['Sub Category']]+f'{i:03}'
i+=1
当我通过打印生成的代码来调试代码时,它们似乎打印得很好,但它们没有被分配Code
到df
. 难道我做错了什么?他们是解决这个问题的更好方法吗?
解决方案
我做了假设文本可能不会像示例中那样被重复地知道。它可能会改变。如果不是,最好使用命名组。以下两个选项:
如果文本的硬编码部分不起作用,请使用:
df=df.assign(code=df['Text'].str.extract('(^\D{2})'),subcode=df['Text'].str.extract('(\D{3}(?=\d))'),numbers=df['Text'].str.extract('(\d+$)'))
命名组
df['Text'].str.extract(r'(?P<code>^[CT]+)(?P<subcode>[SCT]+)(?P<numbers>\d+$)')
所有选项导致:
code subcode numbers
0 CT SCT 001
1 CT SCT 002
2 CT SCT 003
推荐阅读
- powershell - 如何在 Powershell 中 HTTP PUT 文件并捕获响应正文?
- python - 我可以在 Python 中创建一个简单的小型数据库吗?
- r - ggplot:重新排序多面(棒棒糖)图
- javascript - else 语句中预期的声明或语句
- c# - 如何通过特定的适配器在 C# 中发送 ping?
- angular - Angular Datepicker无缘无故无效
- c - 将字符输入转换为十进制输出 - 不明白
- python-3.x - 登录一个网站,然后在浏览器中打开它
- javascript - 将数据从 node.js 发送回客户端 javascript
- javascript - 找不到 google.maps.places.PlacesService() 的任何示例并出现错误