如何反转 pandas 中的列值 - pythonic 方式?

How to Invert column values in pandas - pythonic way?

我有一个如下所示的数据框

cdf = pd.DataFrame({'Id':[1,2,3,4,5],
                    'Label':[1,1,1,0,0]})

我的objective是

a) 在 Label

中将 0s 替换为 1s 并将 1s 替换为 0s

我正在尝试类似下面的操作

cdf.assign(invert_label=cdf.Label.loc[::-1].reset_index(drop=True)) #not work
cdf['invert_label'] = np.where(cdf['Label']==0, '1', '0')

' 但这不起作用。它颠倒顺序

我希望我的输出如下所示

    Id  Label
0   1   0
1   2   0
2   3   0
3   4   1
4   5   1

可以比较0,所以对于0得到True,对于不0得到False,然后转换为整数进行映射True, False1, 0:

print (cdf['Label'].eq(0))
0    False
1    False
2    False
3     True
4     True
Name: Label, dtype: bool

cdf['invert_label'] = cdf['Label'].eq(0).astype(int)

print (cdf)
   Id  Label  invert_label
0   1      1             0
1   2      1             0
2   3      1             0
3   4      0             1
4   5      0             1

另一个想法是使用映射:

cdf['invert_label'] = cdf['Label'].map({1:0, 0:1})

print (cdf)
   Id  Label  invert_label
0   1      1             0
1   2      1             0
2   3      1             0
3   4      0             1
4   5      0             1

一个明显的答案可能是使用 1-value:

cdf['Label2'] = 1-cdf['Label']

输出:

   Id  Label  Label2
0   1      1       0
1   2      1       0
2   3      1       0
3   4      0       1
4   5      0       1

您也可以映射 not 函数 -

import operator
cdf['Label'].map(operator.not_).astype('int')

另一种方式,我将其添加为单独的答案,因为这可能不够“pythonic”(从某种意义上说,它不是很明确)是使用按位 xor

cdf['Label'] ^ 1