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

基于Pandas DataFrame分组生成单条目字典列表的高效实现

Pandas分组生成指定字典列表的高效方案

原始数据

给定如下Pandas DataFrame:

header1header2
Firstrow1
Secondrow2
Thirdrow1
Fourthrow2
Fifthrow1

需求说明

针对header2列值相同的分组:

  • 排除每组的第一行
  • 每个后续行生成一个单条目字典,键为该组第一行的header1值,值为当前行的header1值

预期输出:

  • 理想输出:[{"First":"Third"}, {"Second":"Fourth"}, {"First":"Fifth"}]
  • 简化输出(仅保留每组第一个后续行的映射):{"First":"Third","Second":"Fourth"}

要求方案具备低计算量,替代嵌套循环实现。

高效实现方案

步骤1:准备数据与分组标记

先给每个分组添加组内行号,用于区分组内首行与后续行:

import pandas as pd

# 初始化DataFrame
df = pd.DataFrame({
    'header1': ['First', 'Second', 'Third', 'Fourth', 'Fifth'],
    'header2': ['row1', 'row2', 'row1', 'row2', 'row1']
})

# 为每个header2分组添加组内行号(从0开始计数)
df['group_rank'] = df.groupby('header2').cumcount()

步骤2:映射组首行的header1值

提取每个header2分组的首个header1值,映射到所有行:

# 生成header2到组首header1的映射字典
first_row_map = df[df['group_rank'] == 0].set_index('header2')['header1'].to_dict()
# 给所有行添加对应分组的首行header1值
df['group_first'] = df['header2'].map(first_row_map)

步骤3:生成目标字典列表

过滤掉组内首行,逐行生成单条目字典并转换为列表:

# 生成理想输出的字典列表
result = df[df['group_rank'] > 0].apply(lambda x: {x['group_first']: x['header1']}, axis=1).tolist()
print(result)
# 输出:[{"First":"Third"}, {"Second":"Fourth"}, {"First":"Fifth"}]

简化输出实现

如果只需要每组第一个后续行的映射,直接生成字典即可:

# 生成简化版字典
simplified_result = df[df['group_rank'] == 1].set_index('group_first')['header1'].to_dict()
print(simplified_result)
# 输出:{"First":"Third","Second":"Fourth"}

方案优势

全程使用Pandas的向量化分组操作,避免了嵌套循环的逐行遍历,计算效率远高于手动循环,尤其在处理大体积数据集时性能提升明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:32:05