如何使用Pandas实现数据集的多层级下钻分组统计功能?
Pandas实现多级下钻分组统计方案
可以通过Pandas实现该需求,相比自定义递归循环,Pandas内置的分组能力在处理大量数据时效率更高,且代码更易维护。
完整实现代码
1. 依赖导入与数据准备
import pandas as pd # 构造示例数据集,实际使用时可通过pd.read_csv等接口读取真实数据 data = [ ["Donald", "Trump", "England", "London", "Blackheath"], ["Bill", "Gates", "England", "London", "Archway"], ["Donald", "Duck", "England", "York", "BadgerHill"], ["Donald", "Duck", "Germany", "Berlin", "Friedrichshain"] ] df = pd.DataFrame(data, columns=["FirstName", "LastName", "Country", "City", "Neighborhood"]) # 筛选配置(修正了原配置中LastName缺右引号的笔误) FILTERS = [ {'key': 'address', 'labels': ['Country', 'City', 'Neighborhood']}, {'key': 'name', 'labels': ['FirstName', 'LastName']}, ]
2. 嵌套结构生成函数
def build_nested_group(df, level_labels, current_level=0): # 处理到最后一层时,直接返回当前层级各值的统计结果 if current_level == len(level_labels) - 1: count_series = df.groupby(level_labels[current_level], sort=False).size() return [{"value": k, "count": int(v)} for k, v in count_series.items()] # 非最后一层:统计当前层级计数 + 递归生成子层级结构 current_col = level_labels[current_level] groups = df.groupby(current_col, sort=False) res = [] for group_val, group_df in groups: res.append({ "value": group_val, "count": len(group_df), "items": build_nested_group(group_df, level_labels, current_level + 1) }) return res
3. 生成最终结果
final_result = {} for conf in FILTERS: final_result[conf["key"]] = build_nested_group(df, conf["labels"])
结果说明
执行上述代码后输出的final_result与你给出的预期结构完全一致,可直接传给前端用于下钻筛选器渲染。该实现支持任意层级的自定义分组配置,仅需调整FILTERS中的labels即可适配不同的下钻需求,无需修改核心逻辑。
内容的提问来源于stack exchange,提问作者dina
相关产品推荐
相关产品推荐

