如何按区域、年龄组分组对CSV表前两列外各年份人口列求和
纽约市人口数据5岁年龄组汇总实现方案
方案1:Python Pandas实现(适合批量处理、数据量较大的场景)
提前安装pandas依赖:pip install pandas
完整实现代码:
import pandas as pd # 读取原始CSV文件,替换为你本地的文件路径 df = pd.read_csv("nyc_population_raw.csv") # 定义年龄分组转换逻辑 def age_to_group(age_val): # 处理85+特殊标识 if str(age_val).strip() == "85+": return "85+" try: age_num = int(age_val) except: return "85+" if age_num >= 85: return "85+" # 按5岁间隔生成分组标签 start = (age_num // 5) * 5 return f"{start}-{start+4}" # 生成年龄组列 df["age_group"] = df["Age"].apply(age_to_group) # 自动识别所有2021-2034的年份列,无需手动枚举 year_columns = [col for col in df.columns if col.isdigit() and 2021 <= int(col) <= 2034] # 按区域、年龄组分组求和 summary_df = df.groupby(["Area", "age_group"], as_index=False)[year_columns].sum() # 重命名列匹配目标输出结构 summary_df = summary_df.rename(columns={"age_group": "Age"}) # 导出结果到新CSV,支持Excel直接打开 summary_df.to_csv("nyc_population_summary.csv", index=False, encoding="utf-8-sig")
方案2:Excel操作实现(适合小数据量、无代码基础的场景)
- 新增「年龄组」辅助列,单元格公式示例(假设年龄列在B列,第一行数据在第2行):
=IF(B2="85+","85+",IF(B2>=85,"85+",FLOOR(B2,5)&"-"&(FLOOR(B2,5)+4))) - 选中全表插入数据透视表,行区域依次添加「Area」、「年龄组」字段
- 值区域添加2021-2034所有年份字段,值字段汇总方式选择「求和」
- 调整透视表格式后直接导出即可得到目标汇总表
内容的提问来源于stack exchange,提问作者hhp
相关产品推荐
相关产品推荐

