3 回答

TA贡献1911条经验 获得超7个赞
使用eq创建布尔系列和CONVER那布尔系列INT有astype:
df['S'] = df['S'].eq(1).astype(int)
或者
df['S'] = (df['S'] == 1).astype(int)
输出:
Age Sex S
0 30 F 1
1 40 M 1
2 50 M 0
3 60 F 0
4 70 M 1
5 80 F 0

TA贡献1804条经验 获得超2个赞
不要使用apply,只需使用loc即可分配值:
df.loc[df.S.eq(2), 'S'] = 0
Age Sex S
0 30 F 1
1 40 M 1
2 50 M 0
3 60 F 0
4 70 M 1
5 80 F 0
如果您需要性能更高的选项,请使用np.select。这也更具可伸缩性,因为您可以随时添加更多条件:
df['S'] = np.select([df.S.eq(2)], [0], 1)

TA贡献1860条经验 获得超8个赞
您已接近,但需要进行一些更正。由于要使用函数,因此请删除for循环并替换n为value。此外,请使用apply代替map。Apply一次对整个列进行操作。有关如何正确使用vs vs的信息,请参见此答案applyapplymapmap
def app(value):
if value == 1:
return 1
elif value == 2:
return 0
df['S'] = df.S.apply(app)
Age Sex S
0 30 F 1
1 40 M 1
2 50 M 0
3 60 F 0
4 70 M 1
5 80 F 0
添加回答
举报