如何将整数掩码编码为pandas中的虚拟变量

时间:2018-03-20 13:57:32

标签: pandas bitmask dummy-variable one-hot-encoding

我想将存储在pandas dataframe列中的整数掩码编码为相应的二进制特征,这些二进制特征对应于那些整数中的位位置。 例如,给定4位整数和十进制值11我想在整个列中导出4列,值为1,0,1,1等等。

1 个答案:

答案 0 :(得分:3)

您可以使用:

df = pd.DataFrame([list('{0:04b}'.format(x)) for x in df['col']], index=df.index).astype(int)

谢谢@pir for python 3.6+解决方案:

df = pd.DataFrame([list(f'{i:04b}') for i in df['col'].values], df.index)

<强> numpy的

将数组转换为DataFrame - 来自this的解决方案,还为每行的交换值添加了切片:

d = df['col'].values
m = 4
df = pd.DataFrame((((d[:,None] & (1 << np.arange(m)))) > 0)[:, ::-1].astype(int))
#alternative
#df = pd.DataFrame((((d[:,None] & (1 << np.arange(m-1,-1,-1)))) > 0).astype(int))

或者:

df = pd.DataFrame(np.unpackbits(d[:,None].astype(np.uint8), axis=1)[:,-m:])