如何在Python的pandas.DataFrame中将1/0转换为Yes/No?附R实现示例
解决Python中0/1列转YES/NO新列的问题
Hey there! Glad to help you translate that R logic over to Python with pandas. Here are a few straightforward ways to achieve the same result you got in R:
方法1:使用map进行键值映射
这是最直观的方式,直接把beta列的0和1映射成对应的'NO'和'YES':
import pandas as pd df = pd.DataFrame({'alpha': [50, 51, 52], 'beta': [1,0,1]}) # 用字典定义映射关系 df['gamma'] = df['beta'].map({0: 'NO', 1: 'YES'})
方法2:使用numpy.where做条件判断
如果需要更灵活的条件逻辑(比如后续要扩展判断规则),这种方法会更合适:
import pandas as pd import numpy as np df = pd.DataFrame({'alpha': [50, 51, 52], 'beta': [1,0,1]}) # 条件:beta等于1时返回YES,否则返回NO df['gamma'] = np.where(df['beta'] == 1, 'YES', 'NO')
方法3:转成分类变量(和R的factor逻辑一致)
如果你想复刻R中factor的行为(比如节省内存、保留分类属性),可以把列转成pandas的分类类型:
import pandas as pd df = pd.DataFrame({'alpha': [50, 51, 52], 'beta': [1,0,1]}) # 先把beta转成分类类型,再重命名分类标签 df['gamma'] = df['beta'].astype('category') df['gamma'] = df['gamma'].cat.rename_categories({0: 'NO', 1: 'YES'})
运行结果
不管用哪种方法,最终的DataFrame都会是这样:
alpha beta gamma 0 50 1 YES 1 51 0 NO 2 52 1 YES
每种方法各有优势:
map适合简单固定的键值映射,代码简洁numpy.where适合复杂的多条件判断场景- 分类变量的方法和R的
factor逻辑最贴近,适合处理大量重复分类值的数据集,能有效节省内存
内容的提问来源于stack exchange,提问作者Spring
相关产品推荐
相关产品推荐

