在pandas中如何按日期对符合自定义年龄组条件的列值分组求和
解决方法
你需要先定义自定义年龄组的映射规则,再按「日期+新年龄组」维度聚合求和即可。由于你需要的3个年龄组存在包含关系(75+属于60+的子集),可以通过分别计算每个大分组再合并的方式实现,逻辑清晰不易出错:
import pandas as pd # 自定义年龄组映射规则:key为新分组名,value为对应的原始细分年龄组 group_map = { "18 - 59": ["18 - 29", "30 - 49", "50 - 54", "55 - 59"], "60+": ["60 - 64", "65 - 69", "70 - 74", "75 - 79", "80+"], "75+": ["75 - 79", "80+"] } res = [] for new_age, origin_ages in group_map.items(): # 筛选对应原始年龄段,按日期求和后补充新分组字段 tmp = df[df["AgeGroup"].isin(origin_ages)].groupby("Date", as_index=False)["Quantity"].sum() tmp["AgeGroup"] = new_age res.append(tmp) # 合并所有结果后按日期排序,得到最终输出 final_df = pd.concat(res, ignore_index=True).sort_values(by=["Date", "AgeGroup"]).reset_index(drop=True)
逻辑说明
- 先把每个自定义大分组对应的原始细分年龄组提前定义好,后续修改规则不需要调整核心逻辑
- 逐个筛选每个大分组对应的原始数据,按日期分组求和,同时给结果加上当前大分组的标签
- 把三个分组的计算结果合并后排序,就得到了你需要的按日期拆分、自定义分组求和的结果
内容的提问来源于stack exchange,提问作者Bluetail
相关产品推荐
相关产品推荐

