熊猫反向二进制编码

时间:2019-05-25 07:54:16

标签: python pandas

我有一个Pandas数据框,希望反转三列的二进制编码(即get_dummies())。编码从左到右:

    a   b   c
0   0   1   1
1   0   0   1
2   1   1   1
3   1   0   0

将导致一个新的类别列C带有值0-7

    C
1   6   
2   4   
3   7
4   1

我不确定为什么此行在axis=1附近给我一个语法错误:

df['C'] = df.apply(lambda x: (x['a']==1 ? 1:0)+(x['b']==1 ? 2:0)+(x['c']==1 ? 4:0), axis=1)

2 个答案:

答案 0 :(得分:2)

如果性能很重要,请使用numpy-首先将DataFrame转换为numpy数组,然后使用bitwise shift

a = df.values
#pandas 0.24+
#a = df.to_numpy()
df['C'] = a.dot(1 << np.arange(a.shape[-1]))
print (df)
   a  b  c  C
0  0  1  1  6
1  0  0  1  4
2  1  1  1  7
3  1  0  0  1

答案 1 :(得分:1)

您在做什么是对的。 (只需要对语法进行一些修改)

我已经修改了您的代码,

>>> df['C'] = df.apply(lambda x: (1 if x['a']==1 else 0)+(2 if x['b']==1 else 0)+(4 if x['c']==1 else 0), axis=1)