Pandas:用较短的名称对长行值进行编码,并使用其他列值作为名称的一部分

Pandas: Encode long row values with shorter names and use another column values as a part of the name

我有一个包含大量行的大数据集。我在该数据集中有一列具有长行值。我想用较短的名称重命名这些行值,并使用以前的列值作为名称的一部分。我如何使用 Pandas 执行此操作?

我有这样的数据集:

并且想要这样的输出:

你要找的是pd.factorize函数,它将对象的不同模式编码为一个枚举类型(不同序号),如下:

df['Col2'] = df['Col1'] + 'U' + df.groupby('Col1')['Col2'].transform(lambda x: pd.factorize(x)[0] + 1).astype(str)

由于 Col1 的每个不同值都需要从 1 重新设置序列号,我们使用 .GroupBy() + .transform() 来帮助解决这个问题。

演示

数据输入

data = {'Col1': ['C1', 'C1', 'C1', 'C2', 'C2', 'C2', 'C2', 'C3'],
        'Col2': ['XXXXXXXXXXXXXX', 'XXXXXXXXXXXXXX', 'YYYYYYYYYYYYYY', 'ZZZZZZZZZZZZZZ', 'ZZZZZZZZZZZZZZ', 'ZZZZZZZZZZZZZZ', 'KKKKKKKKKKKKKK', 'MMMMMMMMMMMMMM']}
df = pd.DataFrame(data)   

print(df) 


  Col1            Col2
0   C1  XXXXXXXXXXXXXX
1   C1  XXXXXXXXXXXXXX
2   C1  YYYYYYYYYYYYYY
3   C2  ZZZZZZZZZZZZZZ
4   C2  ZZZZZZZZZZZZZZ
5   C2  ZZZZZZZZZZZZZZ
6   C2  KKKKKKKKKKKKKK
7   C3  MMMMMMMMMMMMMM

输出:

print(df)

  Col1  Col2
0   C1  C1U1
1   C1  C1U1
2   C1  C1U2
3   C2  C2U1
4   C2  C2U1
5   C2  C2U1
6   C2  C2U2
7   C3  C3U1