【问题标题】:how to combine different categorical attribute values in dataframe如何在数据框中组合不同的分类属性值
【发布时间】:2019-06-26 13:24:54
【问题描述】:

我正在研究纽约市房地产销售数据集(https://www.kaggle.com/new-york-city/nyc-property-sales)。

有一列“BUILDING CLASS CATEGORY”,它有几个不同的分类字符串值。我想要做的是只选择出现次数最多的前 4 个类别,并将其余的值组合成一个。 例如-

> dataset["BUILDING CLASS CATEGORY"].value_counts()

01 ONE FAMILY DWELLINGS                         12686
10 COOPS - ELEVATOR APARTMENTS                  11518
02 TWO FAMILY DWELLINGS                          9844
13 CONDOS - ELEVATOR APARTMENTS                  7965
09 COOPS - WALKUP APARTMENTS                     2504
03 THREE FAMILY DWELLINGS                        2318
07 RENTALS - WALKUP APARTMENTS                   1743

所以我想要的是前 4 个类别的所有实例都替换为一些整数值,例如

01 ONE FAMILY DWELLINGS instances are replaced by 0
10 COOPS - ELEVATOR APARTMENTS  instances are replaced by 1
02 TWO FAMILY DWELLINGS instances are replaced by 2
13 CONDOS - ELEVATOR APARTMENTS instances are replaced by 3
all the other instances are replaced by integer 4

所以下次我运行命令时,它应该输出如下内容:

> dataset["BUILDING CLASS CATEGORY"].value_counts()
0     12686
1     11518
2      9844
3      7965
4      6565   #sum of all the other instances

我尝试过使用 LabelEncoder,但我的方法太长了,所以如果有有效的方法可以做到这一点,请告诉我。

【问题讨论】:

  • 你为什么要给他们贴标签..?

标签: python-3.x pandas


【解决方案1】:

让我们简称为您的系列:

building_cat = dataset["BUILDING CLASS CATEGORY"]

这是你已经做过的:

vc = building_cat.value_counts()

现在获取前 4 名的列表:

top4 = vc[:4].index.tolist()

并将其映射到您的 df:

building_cat  = building_cat.map(lambda x: top4.index(x) if x in top4 else 4)

我没有下载数据集,如果不起作用我会在本地尝试。

如果需要,您可以更改类型:

building_cat  = building_cat.astype("category")

【讨论】:

    猜你喜欢
    • 2022-08-17
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    • 2023-02-24
    相关资源
    最近更新 更多