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

如何优化Pandas分组后将选定列转为字典列表的代码?

嘿,这个问题我太熟了!你的原代码之所以内存占用高,核心问题是给每个组里的每一行都重复赋值了同一个字典列表,之后还要用drop_duplicates去重,这完全是做了无用功,还浪费了内存。

咱们直接换个思路:既然每个id组只需要生成一次字典列表,那我们就让分组操作直接返回每个组的结果,不用生成冗余行。

优化方案(高效且简洁)

直接用groupby.apply()对每个组的子DataFrame处理,一步到位生成目标结构:

import pandas as pd

df = pd.DataFrame({'id': [1, 1, 2, 2, 3], 'field1': [1, 2, 3, 4, 5], 'field2': ['a', 'b', 'c', 'd', 'e']})

# 优化后的代码
result = df.groupby('id').apply(
    lambda group: group[['field1', 'field2']].to_dict(orient='records')
).reset_index(name='fields')

print(result)

运行后输出的结果完全符合你的需求:

id                                             fields
0   1  [{'field1': 1, 'field2': 'a'}, {'field1': 2, 'field2': 'b'}]
1   2  [{'field1': 3, 'field2': 'c'}, {'field1': 4, 'field2': 'd'}]
2   3  [{'field1': 5, 'field2': 'e'}]

为什么这个方法更好?

  1. 无冗余数据:每个id组只生成一次字典列表,直接作为结果的一行,不会生成和组长度相同的重复行,内存占用直接降到最低。
  2. 代码更简洁:去掉了多余的test函数、重复赋值和去重操作,逻辑一目了然。
  3. 性能更优:避免了不必要的行复制和去重计算,处理大数据集时差距会非常明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:09:04