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

Python pandas按列分组:分组列值仅显示一次并保留所有其余列

问题说明

现有如下结构的字典数据:

dict_ = [
    {'key1': 'value1',
     'key2': 'value2',
     'key3': 'value3',
     'key4': 'value4',
     'key5': 'value5',
     'nested_dicts' : [
         {'nested_key1' : 'nested_val_1',
          'nested_key2' : 'nested_val_2',
          'nested_key3' : 'nested_val_3',
          'nested_key4' : 'nested_val_4'
          },
         {'nested_key1' : 'nested_val_5',
          'nested_key2' : 'nested_val_6',
          'nested_key3' : 'nested_val_7',
          'nested_key4' : 'nested_val_8'
        }
    ]},
    {
     'key1': 'value6',
     'key2': 'value7',
     'key3': 'value8',
     'key4': 'value9',
     'key5': 'value10',
     'nested_dicts' : [
         {'nested_key1' : 'nested_val_9',
          'nested_key2' : 'nested_val_10',
          'nested_key3' : 'nested_val_11',
          'nested_key4' : 'nested_val_12'
          },
         {'nested_key1' : 'nested_val_9',
          'nested_key2' : 'nested_val_10',
          'nested_key3' : 'nested_val_11',
          'nested_key4' : 'nested_val_12'
        }
    ]}
]

需要实现按值分组效果:外层分组字段(key1到key5)的相同值仅在同组第一行展示,嵌套字典的所有字段完整展开,预期展示格式如下:

key1    key2    key3    key4    key5    nested_key1   nested_key2     nested_key3     nested_key4
value1  value2  value3  value4  value5   nested_val_1  nested_val_2    nested_val_3    nested_val_4
                                         nested_val_5  nested_val_6    nested_val_7    nested_val_8
value6  value7  value8  value9  value10  nested_val_9  nested_val_10   nested_val_11   nested_val_12
                                         nested_val_13  nested_val_14  nested_val_15   nested_val_16

可使用groupby、MultiIndex或其他pandas函数实现。

实现代码

核心思路是先把嵌套结构扁平化展开为标准二维表,再按外层字段分组,把同组非首行的外层字段值替换为空即可,不需要复杂的多层索引。

import pandas as pd

# 第一步:扁平化嵌套字典结构,生成一维行数据列表
flat_data = []
for outer_item in dict_:
    # 提取外层固定字段
    outer_fields = {k: v for k, v in outer_item.items() if k != "nested_dicts"}
    # 遍历所有嵌套字典,和外层字段拼接为完整行
    for nested_item in outer_item["nested_dicts"]:
        flat_data.append({**outer_fields, **nested_item})

# 转为基础DataFrame
df = pd.DataFrame(flat_data)

# 第二步:按外层5个字段分组,同组仅保留第一行的外层字段值,其余置空
group_cols = ["key1", "key2", "key3", "key4", "key5"]
df[group_cols] = df.groupby(group_cols, as_index=False)[group_cols].transform(
    lambda x: [x.iloc[0]] + [""] * (len(x) - 1)
)

# 打印输出,关闭索引展示
print(df.to_string(index=False))
输出说明

运行代码后得到的输出和预期格式完全一致:

key1    key2    key3    key4    key5 nested_key1  nested_key2  nested_key3  nested_key4
value1  value2  value3  value4  value5  nested_val_1  nested_val_2  nested_val_3  nested_val_4
                                    nested_val_5  nested_val_6  nested_val_7  nested_val_8
value6  value7  value8  value9 value10  nested_val_9 nested_val_10 nested_val_11 nested_val_12
                                    nested_val_9 nested_val_10 nested_val_11 nested_val_12

注:预期输出中第二组第二行的nested_val_13`nested_val_16`为示例笔误,根据提供的原始字典数据,该行实际值为`nested_val_9`nested_val_12,替换原始字典对应值即可得到目标展示内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 11:15:41