如何反转 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, False
到 1, 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
我有一个如下所示的数据框
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, False
到 1, 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