如何使用Pandas按近海区域类别统计房屋数量?
问题解决:近海区域房屋数量分组统计
问题描述
我想要统计近海区域(NEAR BAY、<1HR OCEAN、INLAND、NEAR OCEAN、ISLAND)这5类对应的房屋数量,但编写的代码仅返回房屋总条数(20640条),未能得到各区域类别的分组统计结果。以下是我使用的代码:
import pandas as pd proximities = [] for i in range(20640): if not data.ocean_proximity[i] in proximities: proximities.append(data.ocean_proximity[i]) proximities df = pd.DataFrame(data.ocean_proximity) print(df.count())
当前输出结果为:
ocean_proximity 20640 dtype: int64
期望得到的结果形式如下(数值为示例):
NEAR BAY 927 <1HR OCEAN 2284 INLAND 2060 NEAR OCEAN 9482 ISLAND 4133
请问如何修改代码实现该需求?是否是Google Colab出现了问题?所用数据文件为:file:///C:/Users/Minerva%20Panganiban/Downloads/housing.pdf
解决方案
不是Google Colab的问题,是代码逻辑未实现分组统计需求——df.count()仅统计列的非空值总数,不会按类别分组计数。以下两种方法可以快速实现目标:
方法1:使用value_counts()(推荐)
Pandas的value_counts()方法专门用于统计分类列的各值出现次数,代码简洁高效:
import pandas as pd # 直接统计各区域类别数量 category_counts = data.ocean_proximity.value_counts() # 若需仅保留指定的5类(过滤数据中可能存在的其他分类),可添加以下代码 target_categories = ['NEAR BAY', '<1HR OCEAN', 'INLAND', 'NEAR OCEAN', 'ISLAND'] category_counts = category_counts.reindex(target_categories, fill_value=0) # 输出结果 print(category_counts)
方法2:使用groupby()分组统计
通过groupby按区域类别分组后,用size()统计每组数量,逻辑更直观:
import pandas as pd # 按区域类别分组并统计数量 category_counts = data.groupby('ocean_proximity').size() # 筛选指定5类 target_categories = ['NEAR BAY', '<1HR OCEAN', 'INLAND', 'NEAR OCEAN', 'ISLAND'] category_counts = category_counts.reindex(target_categories, fill_value=0) # 输出结果 print(category_counts)
原代码问题说明
原代码中的循环仅收集了不重复的区域类别,未实现计数逻辑;最后调用的df.count()仅返回列的总记录数,因此无法得到分组统计结果。使用上述两种方法即可直接输出你需要的格式。
内容的提问来源于stack exchange,提问作者Migs Panganiban
相关产品推荐
相关产品推荐

