pandas 根据条件直接替换某一列的值的两种方法 np.where pandas.DataFrame.mask
#########################################################
写在最前:
自己和朋友成立了一个工作室——图灵数据科学工作室(VX:DataUpward):
一是想和大家交个朋友;
二是想帮助朋友们跳过我们遇到的坑,尽快找到解决办法。
======================================================
工作室的运行也需要付出各种成本,“活下去”是我们的当务之急,如果大家有 :
- 数据分析(报告);
- 商业数据调研;
- 数据可视化展示;
- 数据爬虫;
- -数据模型开发;
- 机器学习算法挖掘
- …
也欢迎和我们工作室开展合作~
根据条件替换某一列的值
一、问题描述
原始数据如下:
当df[2]>0.6
时,用df[1]
的值替代df[0]
的值。
二、解决方案
2.1 方法一:通过np.where
替换
numpy.where(condition,x,y)
condition:类数组对象,布尔逻辑(即True或False),如果条件成立,则赋值x,否则赋值y
2.2 方法二:通过pandas.DataFrame.mask
替换
DataFrame.mask(cond, x, y)
cond:类数组对象,布尔逻辑(即True或False),如果条件成立,则赋值x,否则赋值y
三、演示示例
3.1 方法一 示例
# 1. 当`df[2]>0.6`时,用`df[1]`的值替代`df[3]`的值,否则用df[0]的值保持。
%timeit df[3] = np.where(df[2]>0.6, df[1], df[0])
df
3.2 方法二 示例
# 2. 当`df[2]<0.4`时,用`df[1]`的值替代`df[4]`的值,否则用df[0]的值保持。
%timeit df[4] = df[0].mask(df[2]>0.6, df[1])
df
三、总结
-
可以看出
numpy.where(condition,x,y)
的时间复杂度会低于DataFrame.mask(cond, x, y)