如何在Python Pandas中基于DataFrame其他列生成指定规则的新列?
实现方法
嘿,这事儿好办!我给你准备了几种简洁的方法来实现你想要的效果,咱们一起来看看~
首先,先还原你的原始数据:
import pandas as pd import numpy as np data = pd.DataFrame({"col1" : ["a", "b", "c"], "binary" : [0, 1, 0]})
方法一:使用np.where(最直观)
np.where可以根据条件直接映射值,语法非常清晰:
data['new'] = np.where(data['binary'] == 1, data['col1'], np.nan)
解释:当binary列的值等于1时,新列new取col1的对应值;否则设置为np.nan。
方法二:使用loc索引赋值
先给新列统一初始化NaN,再针对性替换符合条件的行:
data['new'] = np.nan data.loc[data['binary'] == 1, 'new'] = data['col1']
这种方法逻辑很直白,先把所有行的new列设为缺失值,再把binary为1的行替换成col1的值。
方法三:使用pandas的where/mask方法
pandas自身的where和mask方法也能轻松实现:
- 用
where:保留满足条件的值,不满足的替换为NaN
data['new'] = data['col1'].where(data['binary'] == 1, np.nan)
- 用
mask:把满足条件(这里是binary !=1)的值替换为NaN
data['new'] = data['col1'].mask(data['binary'] != 1, np.nan)
最终结果
执行任意一种方法后,你的DataFrame都会变成:
col1 binary new 0 a 0 NaN 1 b 1 b 2 c 0 NaN
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

