Python 熊猫一次热编码中未知分类值的处理

Python 熊猫一次热编码中未知分类值的处理,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个熊猫数据帧,在这个数据帧上我使用get\u dummies方法进行一次热编码 下面是示例代码- import pandas as pd X = pd.DataFrame( ['a','a,b','a,c'], columns = ['category']) X.head() category 0 a 1 a,b 2 a,c 下面是我如何做一个热编码 X_transformed = pd.concat([X, X['category'].str.ge

我有一个熊猫数据帧,在这个数据帧上我使用
get\u dummies
方法进行一次热编码

下面是示例代码-

import pandas as pd
X = pd.DataFrame( ['a','a,b','a,c'], columns = ['category'])
X.head()
  category
0        a
1      a,b
2      a,c
下面是我如何做一个热编码

X_transformed = pd.concat([X, X['category'].str.get_dummies(sep=',')], axis=1)
X_transformed.head()
  category  a  b  c
0        a  1  0  0
1      a,b  1  1  0
2      a,c  1  0  1
问题是,当我得到一个具有未知分类值的记录时,我不知道如何最好地处理它-

y = pd.DataFrame(['a','d'], columns = ['category'])
y.head()
  category
0        a
1        d
如果我在这个新的数据帧上再次执行
获取虚拟对象
,那么我会得到如下结果

y_transformed = pd.concat([y, y['category'].str.get_dummies(sep=',')], axis=1)
y_transformed.head()

  category  a  d
0        a  1  0
1        d  0  1
而我的预期产出是

  category  a  b  c
0        a  1  0  0
1        d  0  0  0
因为类别d以前从未出现过,所以我想通过将列
a、b、c
的所有标志设置为0来忽略它

如何在熊猫中实现这一点?

轴=1
上使用
填充值=0

y_transformed = y_transformed.reindex(X_transformed.columns, axis=1, fill_value=0)
结果:

  category  a  b  c
0        a  1  0  0
1        d  0  0  0

谢谢Shubham的回答。它起作用了。我有两个问题-首先-原始列名必须是
X_transformed.columns
列表的一部分?第二,reindex做什么?是的,原始列需要是
X\u transformed
的一部分
reindex
使用可选填充逻辑将数据帧的索引与新索引相一致,在这种情况下,我们使用了
fill\u value=0