如何合并同名城市并计算整体识字率占比以找出最低值?
城市识字率合并计算解决方案
需求
合并同名城市的识字率数据,计算各城市的整体识字率及百分比占比,并找出占比最低的城市。
初始代码与数据
初始代码
import pandas as pd df = pd.DataFrame({'Cities': ["Cape Town", "Cape Town", "Cape Town", "Tokyo", "Cape Town", "Tokyo", "Mumbai", "Belgium", "Belgium" ], 'LiteracyRate': [0.05, 0.35, 0.2, 0.11, 0.15, 0.2, 0.65, 0.35, 0.45]}) print(df)
初始数据输出
Cities LiteracyRate 0 Cape Town 0.05 1 Cape Town 0.35 2 Cape Town 0.2 3 Tokyo 0.11 4 Cape Town 0.15 5 Tokyo 0.2 6 Mumbai 0.65 7 Belgium 0.35 8 Belgium 0.45
预期结果
Cities LiteracyRate %LiteracyRate 0 Cape Town 0.75 75 1 Tokyo 0.31 31 2 Mumbai 0.65 65 3 Belgium 0.8 80
错误尝试问题分析
你提供的错误代码存在两个核心问题:
- 未对同名城市进行分组合并,仍保留原始行数据;
- 百分比计算逻辑错误,用单行识字率除以全局总和,而非将城市整体识字率转换为百分比。
错误代码:
# Calculate the percentage df["%LiteracyRate"] = (df["LiteracyRate"]/df["LiteracyRate"].sum())*100 # Show the DataFrame print(df)
正确实现方案
核心步骤
- 分组求和:使用
groupby按城市名称分组,对每组的LiteracyRate求和,得到各城市的整体识字率; - 转换百分比:将整体识字率乘以100并转为整数,得到百分比占比;
- 定位最低占比城市:通过
idxmin找到百分比列最小值对应的行,提取城市名称和占比。
完整代码
import pandas as pd # 初始化数据 df = pd.DataFrame({'Cities': ["Cape Town", "Cape Town", "Cape Town", "Tokyo", "Cape Town", "Tokyo", "Mumbai", "Belgium", "Belgium"], 'LiteracyRate': [0.05, 0.35, 0.2, 0.11, 0.15, 0.2, 0.65, 0.35, 0.45]}) # 分组求和得到各城市整体识字率 city_summary = df.groupby('Cities', as_index=False)['LiteracyRate'].sum() # 计算百分比占比(转为整数) city_summary['%LiteracyRate'] = (city_summary['LiteracyRate'] * 100).astype(int) # 找到识字率占比最低的城市 lowest_literacy_city = city_summary.loc[city_summary['%LiteracyRate'].idxmin()] # 输出结果 print("合并计算后的城市识字率数据:") print(city_summary) print("\n识字率占比最低的城市:") print(f"{lowest_literacy_city['Cities']},占比{lowest_literacy_city['%LiteracyRate']}%")
运行输出
合并计算后的城市识字率数据: Cities LiteracyRate %LiteracyRate 0 Belgium 0.8 80 1 Cape Town 0.75 75 2 Mumbai 0.65 65 3 Tokyo 0.31 31 识字率占比最低的城市: Tokyo,占比31%
内容的提问来源于stack exchange,提问作者liana raphs
相关产品推荐
相关产品推荐

