如何向 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()
)
我正在构建这个
我已经构造了虚拟变量,但是我想添加新示例,但我希望它们适合以前的虚拟变量。
他们可能有新词,那些不应该包括在内。
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()
)