如何在python数据框中基于两列的组合创建唯一代码

2024-09-28 01:24:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建基于两列组合的唯一代码。任何帮助都将非常好。多谢各位

import pandas as pd
data = [['ajay','AL'],['ajay','AB'],['ajay','AL'],['Alex','Ac'],['Alex','Ay'],['Alex','Ac'],['Alex','Ac'],['Bob','Ay'],['Clarke','cv']]
df = pd.DataFrame(data,columns=['Name','Cat'],dtype=float)

输入:

    Name Cat
0    ajay  AL
1    ajay  AB
2    ajay  AL
3    Alex  Ac
4    Alex  Ay
5    Alex  Ac
6    Alex  Ac
7     Bob  Ay
8  Clarke  cv

输出:

           Name Cat  code
0    ajay  AL  AJ_1
1    ajay  AB  AJ_2
2    ajay  AL  AJ_1
3    Alex  Ac  AL_1
4    Alex  Ay  AL_2
5    Alex  Ac  AL_1
6    Alex  Ac  AL_1
7     Bob  Ay  Bo_1
8  Clarke  cv  Cl_1

谢谢


Tags: 代码namedataabcvaccatpd
2条回答

您只需创建一个带有uuid的列,如下所示:

import uuid    
df['code'] = df.apply(lambda x: uuid.uuid1(), axis=1)

或者,如果要合并这两列:

df['code'] = df.apply(lambda row: row.Name + row.Cat, axis=1)

我希望我正确理解了您的问题,此脚本将创建code列,其中前两个字符来自'Name'列,然后是基于'Cat'列的数字:

from itertools import count
from functools import lru_cache
from collections import defaultdict

d = defaultdict(lambda: count(1))

@lru_cache(maxsize=None)
def get_num(n, c):
    return next(d[n])

df['code'] = df.apply(lambda x: '{}_{}'.format(x['Name'][:2].upper(), get_num(x['Name'], x['Cat'])), axis=1)
print(df)

印刷品:

     Name Cat  code
0    ajay  AL  AJ_1
1    ajay  AB  AJ_2
2    ajay  AL  AJ_1
3    Alex  Ac  AL_1
4    Alex  Ay  AL_2
5    Alex  Ac  AL_1
6    Alex  Ac  AL_1
7     Bob  Ay  BO_1
8  Clarke  cv  CL_1

相关问题 更多 >

    热门问题