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
我有一个包含大量行的大数据集。我在该数据集中有一列具有长行值。我想用较短的名称重命名这些行值,并使用以前的列值作为名称的一部分。我如何使用 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