Pandas大数据集下按条件基于其他列生成新列的高效方法咨询
Pandas 大型数据集两类新增列操作高效实现方案
1. 优先取X列值、空值取Y列生成Z列
最高效的实现是使用Pandas原生的fillna向量化方法,完全避免Python层的逐行迭代,适配超大数据集的性能要求:
# 逻辑:X列非空取X,否则取Y df['Z'] = df['X'].fillna(df['Y'])
注:如果你的“有取值”指排除空字符串、0等自定义非空规则,可先将对应值替换为pandas识别的空值
NaN后再执行上述操作。
2. 按Y列是否存在的三元逻辑生成Z列
列是否存在是数据集的全局属性,仅需做一次判断即可,不需要逐行校验,性能损耗几乎可以忽略:
if 'Y' in df.columns: df['Z'] = df['Y'] - df['X'] else: df['Z'] = df['X'].copy()
性能说明
上述两种方案均基于Pandas底层优化的向量化操作实现,相比逐行调用apply、map的自定义逻辑,处理百万行以上级别的数据集时速度快50~100倍,且内存占用更低。
内容的提问来源于stack exchange,提问作者Tonino Fernandez
相关产品推荐
相关产品推荐

