当每个观察值都包含一个可能值列表时,在 Pandas 中生成许多虚拟对象
generate many dummies in Pandas when every observation contains a list of possible values
我有一个数据框,其中一列看起来像:
col
A B C
B C X
U
我想生成一些虚拟变量来告诉我某行是否包含特定值。也就是说,在示例中,我想生成 5 个虚拟变量 (d_A、d_B、d_C、d_X、d_U),以便数据看起来像
col d_A d_B d_C d_X d_U
A B C 1 1 1 0 0
B C X 0 1 1 1 0
...
我有很多很多可能的值,所以我无法轻松地手动完成。知道如何在 pandas(矢量化模式)中做到这一点吗?
谢谢!
使用str.get_dummies
and join
or concat
:
print df.col.str.get_dummies(sep=' ')
A B C U X
0 1 1 1 0 0
1 0 1 1 0 1
2 0 0 0 1 0
print df.join(df.col.str.get_dummies(sep=' '))
col A B C U X
0 A B C 1 1 1 0 0
1 B C X 0 1 1 0 1
2 U 0 0 0 1 0
如果您需要更改列名,请使用列表理解:
df1 = df.col.str.get_dummies(sep=' ')
df1.columns = ['d_' + x for x in df1.columns]
print df1
d_A d_B d_C d_U d_X
0 1 1 1 0 0
1 0 1 1 0 1
2 0 0 0 1 0
print df.join(df1)
col d_A d_B d_C d_U d_X
0 A B C 1 1 1 0 0
1 B C X 0 1 1 0 1
2 U 0 0 0 1 0
print pd.concat([df, df1], axis=1)
col d_A d_B d_C d_U d_X
0 A B C 1 1 1 0 0
1 B C X 0 1 1 0 1
2 U 0 0 0 1 0
我有一个数据框,其中一列看起来像:
col
A B C
B C X
U
我想生成一些虚拟变量来告诉我某行是否包含特定值。也就是说,在示例中,我想生成 5 个虚拟变量 (d_A、d_B、d_C、d_X、d_U),以便数据看起来像
col d_A d_B d_C d_X d_U
A B C 1 1 1 0 0
B C X 0 1 1 1 0
...
我有很多很多可能的值,所以我无法轻松地手动完成。知道如何在 pandas(矢量化模式)中做到这一点吗?
谢谢!
使用str.get_dummies
and join
or concat
:
print df.col.str.get_dummies(sep=' ')
A B C U X
0 1 1 1 0 0
1 0 1 1 0 1
2 0 0 0 1 0
print df.join(df.col.str.get_dummies(sep=' '))
col A B C U X
0 A B C 1 1 1 0 0
1 B C X 0 1 1 0 1
2 U 0 0 0 1 0
如果您需要更改列名,请使用列表理解:
df1 = df.col.str.get_dummies(sep=' ')
df1.columns = ['d_' + x for x in df1.columns]
print df1
d_A d_B d_C d_U d_X
0 1 1 1 0 0
1 0 1 1 0 1
2 0 0 0 1 0
print df.join(df1)
col d_A d_B d_C d_U d_X
0 A B C 1 1 1 0 0
1 B C X 0 1 1 0 1
2 U 0 0 0 1 0
print pd.concat([df, df1], axis=1)
col d_A d_B d_C d_U d_X
0 A B C 1 1 1 0 0
1 B C X 0 1 1 0 1
2 U 0 0 0 1 0