首页 > 解决方案 > 如何使用 np.where() 将数组元素划分为类别?

问题描述

我正在尝试使用 np.where() 将数组的元素分为三类。我的数组是mean_house_value = [200.000, 120.000, 111.765, 326.234, 700.090, 99.345, 150.232, 250.000, 940.000, 177.000, 45.000, 42.000, 620.654]. 数据集称为housinghouse_value_cat是数据集中我要保存新分类的新列。分类如下:

  1. mean_house_value < 200.000
  2. 200.000 < mean_house_value < 400.000
  3. 400.000 < mean_house_value

到目前为止,我的代码如下:

housing["house_value_cat"] = np.ceil(housing["mean_house_value"]/3)
housing["house_value_cat"].where((housing["house_value_cat"]<200.000) &(housing["house_value_cat"]>400.000))
print(housing["house_value_cat"])

如何200.000 < mean_house_value < 400.000在我的代码中实现第二个条件 ( )?

[我想要的输出应该是这样的:1

标签: pythonnumpy

解决方案


Numpy 有一个函数 digitize() 可以做你想做的事:

>>> import numpy as np
>>> mean_house_value = [200.000, 120.000, 111.765, 326.234, 700.090, 99.345, 150.232, 250.000, 940.000, 177.000, 45.000, 42.000, 620.654]
>>> np.digitize(mean_house_value,[0.,200.,400.])
array([2, 1, 1, 2, 3, 1, 1, 2, 3, 1, 1, 1, 3])

您可以使用此结果在数据框中创建一个新列。假设您已经定义了一个名为 Housing 的数据框:

housing["house_value_cat"] = np.digitize(mean_house_value,[0.,200.,400.])

推荐阅读