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

如何使用pandas的groupby与agg按分组合并含字典的列

解决方案

这里使用apply()方法更适配你的场景:agg()更适合内置聚合函数、多聚合规则的需求,你需要自定义合并分组内所有字典的逻辑,用apply()实现更直接。

考虑到你使用的是Python 3.6.5,不支持3.9+新增的字典合并运算符,我们用兼容性最好的dict.update()实现字典合并,完整实现代码如下:

import pandas as pd

# 你的原有DataFrame构造代码
d = {'time':['2021-08-12 14:59:15.230','2021-08-12 14:59:15.230','2021-08-12 14:59:15.230']
   , 'dayy':['14:59:15.231818','14:59:15.231330','14:59:15.232206']
   , 'catg':['40B0','4035','40E8']
   , 'data':[{'OQWOWF': '0', 'OQD8S1F': '10010100'},{'OQTADT': 30.0, 'OQTAVL': '0', 'OQAOAD': 2},{'OQGS01': '0', 'OQGS02': '0', 'OQGS03': '0'}]
   }
df = pd.DataFrame(data=d)

# 字典合并函数
def merge_group_dicts(dict_list):
    merged = {}
    for item in dict_list:
        merged.update(item)
    return merged

# 分组合并逻辑
result = df.groupby('time')['data'].apply(merge_group_dicts).reset_index()

# 输出结果
print(result)

运行后输出结果和你要求的效果完全一致:

time                                               data
0  2021-08-12 14:59:15.230  {'OQWOWF': '0', 'OQD8S1F': '10010100', 'OQTADT': 30.0, 'OQTAVL': '0', 'OQAOAD': 2, 'OQGS01': '0', 'OQGS02': '0', 'OQGS03': '0'}

补充说明:如果你的数据中存在重复的字典键,默认会保留同一分组内后出现的字典的对应值,你可以根据需求修改merge_group_dicts函数的逻辑调整覆盖规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 19:15:02