如何向 pandas 中已创建的虚拟变量添加新示例?

How to add new examples to already made dummy variables in pandas?

我正在构建这个

我已经构造了虚拟变量,但是我想添加新示例,但我希望它们适合以前的虚拟变量。

他们可能有新词,那些不应该包括在内。

0    ["AC","BB"]
1    ["AD","CB", "FF"]
2    ["AA","CC"]
3    ["CA","BB"]
4    ["AA"]

虚拟人已经创建:

     AC    BB    AD  
0     1     1     0
1     0     0     1
   ......

我有新的数据框要构造成虚拟数据框,但我希望它适合以前的虚拟数据框。

让我们想象一下这两个系列:

s1 = pd.Series(map(lambda x: x.split(), ['AC BB', 'AD CB FF', 'AA CC', 'CA BB', 'AA']))
s2 = pd.Series(map(lambda x: x.split(), ['XX ZZ', 'AA YY']), index=[5,6])
>>> s1
0        [AC, BB]
1    [AD, CB, FF]
2        [AA, CC]
3        [CA, BB]
4            [AA]

>>> s2
5    [XX, ZZ]
6    [AA, YY]

然后使用以下方法连接虚拟对象:

pd.concat([pd.get_dummies(s1.explode()).sum(level = 0),
           pd.get_dummies(s2.explode()).sum(level = 0)]).fillna(0).astype(int)

输出:

   AA  AC  AD  BB  CA  CB  CC  FF  XX  YY  ZZ
0   0   1   0   1   0   0   0   0   0   0   0
1   0   0   1   0   0   1   0   1   0   0   0
2   1   0   0   0   0   0   1   0   0   0   0
3   0   0   0   1   1   0   0   0   0   0   0
4   1   0   0   0   0   0   0   0   0   0   0
5   0   0   0   0   0   0   0   0   1   0   1
6   1   0   0   0   0   0   0   0   0   1   0

如果你在两个数据集之间有重复的索引(例如,在 s2 中使用 index=[5,4]),你需要添加 .groupby(level=0).max() 来合并观察结果:

(pd.concat([pd.get_dummies(s1.explode()).sum(level = 0),
            pd.get_dummies(s2.explode()).sum(level = 0)])
   .fillna(0).astype(int)
   .groupby(level=0).max()
)