我有一个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)
答案 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)