如何用pandas统计DataFrame中配套设施总数量最多的城市
核心问题说明
amenities列存储的是类集合格式的字符串,直接调用len()统计的是字符串的字符总数,而非集合内的元素数量,需要先对该列做格式转换再统计。
解决步骤
- 第一步:清理字符串中的特殊符号(大括号、双引号、换行符)
- 第二步:按逗号分割字符串得到单个设施的列表,统计每行的设施数量
- 第三步:按城市分组求和总设施数,取最大值对应的城市
修正后可运行代码
# 处理amenities列:去除特殊符号、按逗号分割为列表 host["amenities"] = host["amenities"].str.replace(r'["{}\n]', "", regex=True).str.split(",") # 统计每行的设施数量 host["am_count"] = host["amenities"].apply(len) # 按城市分组求和总设施数,返回总数量最多的城市名 result = host.groupby("city")["am_count"].sum().idxmax() print(result)
代码优化说明
- 正则匹配补充了
\n规则,可直接清理字段内的换行符,避免影响分割结果 - 用
apply(len)替代列表推导式,写法更符合pandas语法规范,执行效率更高 - 将
argmax()替换为idxmax(),可直接返回最大值对应的城市名,无需再手动匹配索引,兼容性和可读性更好
内容的提问来源于stack exchange,提问作者user177196
相关产品推荐
相关产品推荐

