You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Pandas分类列生成任意深度嵌套字典的通用方法问询

通用嵌套字典生成方案:处理任意数量分类列的Pandas分组

你提到的硬编码方式确实在分类列数量增加时会变得难以维护,这里我们可以用递归思想实现一个通用的tree函数,不管你传入多少个分类列(1个到10个甚至更多),都能自动生成对应深度的嵌套字典,叶子节点为分组后的DataFrame。

实现思路

核心逻辑是逐层递归分组:

  • 终止条件:当没有剩余分类列需要处理时,直接返回当前的DataFrame
  • 递归步骤:取第一个分类列对DataFrame分组,对每个分组结果,递归调用函数处理剩下的分类列,构建下一层字典

完整代码实现

import pandas as pd

def tree(df, cols):
    # 递归终止:没有更多分类列,返回当前DataFrame(返回副本避免原数据被意外修改)
    if not cols:
        return df.copy()
    # 取第一个分类列进行分组
    first_col = cols[0]
    nested_dict = {}
    # 遍历每个分组,构建下一层嵌套结构
    for group_key, group_df in df.groupby(first_col):
        nested_dict[group_key] = tree(group_df, cols[1:])
    return nested_dict

测试示例

用你提供的测试数据验证功能:

# 测试数据
d = {'A': ['a1','a1','a2'], 'B': ['b1','b2','b3'], 'C': ['c1','c2','c2'], 'v': [0,5,1]}
df = pd.DataFrame(data=d)

# 测试单分类列场景
dA = tree(df, cols=['A'])
print("单分类列结果:")
for key, sub_df in dA.items():
    print(f"键 {key} 对应的DataFrame:")
    print(sub_df)
    print("---")

# 测试多分类列场景(比如3层嵌套)
dABC = tree(df, cols=['A','B','C'])
print("\n三分类列结果:")
print(dABC['a1']['b1']['c1'])  # 直接访问最内层的分组DataFrame

效果说明

  • 传入cols=['A']时,返回一层字典,每个键对应A列的唯一值,值为对应筛选后的DataFrame
  • 传入cols=['A','B','C']时,返回三层嵌套字典,最内层是同时满足A=xx、B=xx、C=xx的DataFrame
  • 不管你传入10个还是更多分类列,函数都能自动适配,完全摆脱硬编码的限制,扩展性极强

内容的提问来源于stack exchange,提问作者Quant Christo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:04:35