Python 在两个不同的数据帧中分解列

Python 在两个不同的数据帧中分解列,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧,每个数据帧中都有一个分类列col。我想用数字替换所有类别,所以我决定这样做: df1['col']=pd.factorize(df1['col'])[0] 现在的问题是,我如何才能以同样的方式对df2[col]进行编码?我怎样才能同时对出现在df2[col]中但不在df1[col]中的类别进行编码?您需要一个 对于看不见的标签,这可能是一种解决方案: enc = LabelEncoder() enc.fit(df1['col']) diz_map = dict(zip(enc.

我有两个数据帧,每个数据帧中都有一个分类列
col
。我想用数字替换所有类别,所以我决定这样做:

df1['col']=pd.factorize(df1['col'])[0]

现在的问题是,我如何才能以同样的方式对df2[col]进行编码?我怎样才能同时对出现在
df2[col]
中但不在
df1[col]
中的类别进行编码?

您需要一个


对于看不见的标签,这可能是一种解决方案:

enc = LabelEncoder()
enc.fit(df1['col'])
diz_map = dict(zip(enc.classes_, enc.transform(enc.classes_)+1))

for i in set(df2['col']).difference(df1['col']):
    diz_map[i] = 0

df1['col'] = [diz_map[i] for i in df1['col'].values]
df2['col'] = [diz_map[i] for i in df2['col'].values]

将df2['col']]中所有看不见的值映射为0

您可能希望在代码中添加一些解释,以使其更清晰op@Marco谢谢!还有一件事,如果df2也有一些新标签,而不是在df1中预设的呢?我如何克服它?这不起作用,为什么是0?0是编码器最不可见的值。如果不是,则映射错误。我试图从df1和df2中提取值,并将其分别应用于df1和df2,但大小不同different@yatu解决方案有效。。。。为方便起见,将其设置为0。在LabelEncoder中编码的第一个类始终为0,因此我们确定它存在,同时我们在其他数值类enc.transform(enc.classes_u)+1中操作1的转换,因此不会出错谢谢@yatu。我已经做了编辑,你能看一下最后一个问题吗?
enc = LabelEncoder()
enc.fit(df1['col'])
diz_map = dict(zip(enc.classes_, enc.transform(enc.classes_)+1))

for i in set(df2['col']).difference(df1['col']):
    diz_map[i] = 0

df1['col'] = [diz_map[i] for i in df1['col'].values]
df2['col'] = [diz_map[i] for i in df2['col'].values]