如何将二进制变量的 DataFrame 列转换为多列虚拟变量
How to turn a DataFrame column of binary variables into multiple columns of dummy variables
这应该是一个简单的问题,但由于某些原因我无法在网上找到答案。我有一个由虚拟变量组成的 DataFrame 列:
import pandas as pd
foo = pd.Series([6,7,8,3])
foo1 = bob.apply(lambda x: bin(x)[2:].zfill(4))
foo1
0 0110
1 0111
2 1000
3 0011
我想要的是一个看起来像
的4x4数据框
A B C D
0 1 1 0
0 1 1 1
1 0 0 0
0 0 1 1
我试过使用 get_dummies 没有结果:
foo1.str.get_dummies()
0110 0111 1000 0011
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
str.split 并且将列变成一系列列表也不起作用。我该怎么办?
你可以试试这个:
# convert the series to str type;
# extract all characters with regex .;
# unstack to wide format
foo1.astype(str).str.extractall('(.)')[0].unstack()
这将跳过您从 foo
到 foo1
的初始步骤,让您从 foo
直接到达那里
foo.apply(lambda x: pd.Series(list('{:04b}'.format(x))))
0 1 2 3
0 0 1 1 0
1 0 1 1 1
2 1 0 0 0
3 0 0 1 1
In [49]: pd.DataFrame(foo1.apply(list).values.tolist())
Out[49]:
0 1 2 3
0 0 1 1 0
1 0 1 1 1
2 1 0 0 0
3 0 0 1 1
这应该是一个简单的问题,但由于某些原因我无法在网上找到答案。我有一个由虚拟变量组成的 DataFrame 列:
import pandas as pd
foo = pd.Series([6,7,8,3])
foo1 = bob.apply(lambda x: bin(x)[2:].zfill(4))
foo1
0 0110
1 0111
2 1000
3 0011
我想要的是一个看起来像
的4x4数据框A B C D
0 1 1 0
0 1 1 1
1 0 0 0
0 0 1 1
我试过使用 get_dummies 没有结果:
foo1.str.get_dummies()
0110 0111 1000 0011
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
str.split 并且将列变成一系列列表也不起作用。我该怎么办?
你可以试试这个:
# convert the series to str type;
# extract all characters with regex .;
# unstack to wide format
foo1.astype(str).str.extractall('(.)')[0].unstack()
这将跳过您从 foo
到 foo1
的初始步骤,让您从 foo
foo.apply(lambda x: pd.Series(list('{:04b}'.format(x))))
0 1 2 3
0 0 1 1 0
1 0 1 1 1
2 1 0 0 0
3 0 0 1 1
In [49]: pd.DataFrame(foo1.apply(list).values.tolist())
Out[49]:
0 1 2 3
0 0 1 1 0
1 0 1 1 1
2 1 0 0 0
3 0 0 1 1