狗血的pandas where函数 mask 函数和 where 作用刚好相反

这几天在看“hands-on machine learning with sklearn and tensorflow” 的第二章节,狗血的事情发生了。其中的一部分是需要将median_income划分为5个等分,然后大于5的部分全部归类为5,代码如下:

housing["income_cat"] = np.ceil(housing["median_income"] / 1.5)
housing["income_cat"].where(housing["income_cat"] < 5, 5.0, inplace=True)

结果我看了大半天还以为housing["income_cat"] < 5这里写错了,后来才发现mask 函数和 where 作用刚好相反。

  s = pd.Series(range(5))
  s.where(s > 1, 10)
  0    10.0
  1    10.0
  2    2.0
  3    3.0
  4    4.0

  s.mask(s > 1, 10)
  0    0.0
  1    1.0
  2    10.0
  3    10.0
  4    10.0
  df = pd.DataFrame(np.arange(10).reshape(-1, 2), columns=['A', 'B'])
  m = df % 3 == 0
  # df.where(m, np.array([1,2,3,4,5]).reshape(-1, 5))  #此句话报错
  df.where(m, -df)
  A  B
  0  0 -1
  1 -2  3
  2 -4 -5
  3  6 -7
  4 -8  9

---------------------
作者:依斐
来源:CSDN
原文:https://blog.csdn.net/dss_dssssd/article/details/82818587
版权声明:本文为博主原创文章,转载请附上博文链接!
阅读量: | 柯西君_BingWong | 2018-11-30