Python 替换数据帧中特定列中的唯一值

Python 替换数据帧中特定列中的唯一值,python,pandas,dataframe,Python,Pandas,Dataframe,我的数据框如下所示: col1 col2 col3 Aba xxx yyy bab bhh jjj ccc kkk lll Aba xxx yyy ccc kkk jjj 目前,我正在替换每个列的所有唯一值,例如: 在col1中:Aba被替换为a0,bab被替换为a1,ccc被替换为a2 与col2类似:xxx替换为b0,bhh替换为b1等 简而言之,第一列开始用a0、a1、a2、a3替换唯一值,第二列用b0、b1、b2、b3替换唯一值,第三列用c0

我的数据框如下所示:

col1  col2  col3
Aba   xxx   yyy
bab   bhh   jjj
ccc   kkk   lll
Aba   xxx   yyy
ccc   kkk   jjj
目前,我正在替换每个列的所有唯一值,例如:

col1
中:
Aba
被替换为
a0
bab
被替换为
a1
ccc
被替换为
a2

col2
类似:
xxx
替换为
b0
bhh
替换为
b1

简而言之,第一列开始用
a0、a1、a2、a3
替换唯一值,第二列用
b0、b1、b2、b3
替换唯一值,第三列用
c0、c1、c2
替换唯一值。。etc-使用这个简单的单衬里

import string
df = list(string.ascii_lowercase)[:len(df.columns)] + df.apply(lambda x: pd.factorize(x)[0]).astype(str)
但是我想用上面的方法来替换那些唯一值(
nunique()
function in pandas)少于假设50的列,并且列的其余部分的值可以保持不变

正在寻找使用上述代码的解决方案,这些代码可以更改以包含此目标。我的数据帧有数百万行和超过20列

谢谢

我想我需要:

print (df)
  col1 col2 col3
0  Aba  xxx  jjj
1  Aba  bhh  jjj
2  ccc  kkk  jjj
3  Aba  xxx  yyy
4  ccc  kkk  jjj

#check column for number of unique values
m = df.nunique() < 3
print (m)
col1     True
col2    False
col3     True
dtype: bool

import string
#first select all possible codes and then only by condition
c = np.array(list(string.ascii_lowercase))[:len(df.columns)][m]

#apply solution only for columns by condition
df.loc[:, m] = c + df.loc[:, m].apply(lambda x: pd.factorize(x)[0]).astype(str)
print (df)
  col1 col2 col3
0   a0  xxx   c0
1   a0  bhh   c0
2   a1  kkk   c0
3   a0  xxx   c1
4   a1  kkk   c0
打印(df)
col1 col2 col3
0 Aba xxx jjj
1 Aba bhh jjj
2 ccc kkk JJ
3 Aba xxx yyy
4 ccc kkk jjj
#检查列中的唯一值数
m=df.nunique()<3
打印(m)
col1正确
冒牌货
col3正确
数据类型:bool
导入字符串
#首先选择所有可能的代码,然后仅按条件选择
c=np.array(list(string.ascii_小写))[:len(df.columns)][m]
#仅按条件为列应用解决方案
df.loc[:,m]=c+df.loc[:,m].apply(lambda x:pd.factorize(x)[0]).astype(str)
打印(df)
col1 col2 col3
0 a0 xxx c0
1 a0 bhh c0
2 a1 kkk c0
3 a0 xxx c1
4 a1 kkk c0