如何优化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'}]
为什么这个方法更好?
- 无冗余数据:每个
id组只生成一次字典列表,直接作为结果的一行,不会生成和组长度相同的重复行,内存占用直接降到最低。 - 代码更简洁:去掉了多余的
test函数、重复赋值和去重操作,逻辑一目了然。 - 性能更优:避免了不必要的行复制和去重计算,处理大数据集时差距会非常明显。
内容的提问来源于stack exchange,提问作者user582175
相关产品推荐
相关产品推荐

