#########################################################
写在最前:
自己和朋友成立了一个工作室——图灵数据科学工作室(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

三、总结

  1. 可以看出numpy.where(condition,x,y)的时间复杂度会低于DataFrame.mask(cond, x, y)

  2. numpy.where()官方文档

  3. DataFrame.mask(cond, x, y)官方文档