首页 > 解决方案 > 为数据框中的每一行生成一个代码

问题描述

我正在尝试为数据帧的每一行生成一个代码,这样,前 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

当我通过打印生成的代码来调试代码时,它们似乎打印得很好,但它们没有被分配Codedf. 难道我做错了什么?他们是解决这个问题的更好方法吗?

标签: pythonpandasdataframedictionary

解决方案


我做了假设文本可能不会像示例中那样被重复地知道。它可能会改变。如果不是,最好使用命名组。以下两个选项:

如果文本的硬编码部分不起作用,请使用:

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

推荐阅读