分组依据Python中字典的汇总列表 [英] Group By & Aggregate List of Dictionaries in Python

查看:392
本文介绍了分组依据Python中字典的汇总列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个字典列表,需要在Python中进行汇总:

I have a list of dictionaries which I need to aggregate in Python:

data = [{"startDate": 123, "endDate": 456, "campaignName": "abc", "campaignCfid": 789, "budgetImpressions": 10}, 
{"startDate": 123, "endDate": 456, "campaignName": "abc", "campaignCfid": 789, "budgetImpressions": 50}, 
{"startDate": 456, "endDate": 789, "campaignName": "def", "campaignCfid": 123, "budgetImpressions": 80}]

并且我希望根据预算展示次数进行汇总.

and I'm looking to aggregate based on budgetImpressions.

所以最终结果应该是:

data = [{"startDate": 123, "endDate": 456, "campaignName": "abc", "campaignCfid": 789, "budgetImpressions": 60}, 
{"startDate": 456, "endDate": 789, "campaignName": "def", "campaignCfid": 123, "budgetImpressions": 80}]

请注意,每个带有特定campaignName的条目都将始终具有相同的相应campaignCfid,startDate和endDate.

Note every entry with a certain campaignName will always have the same corresponding campaignCfid, startDate and endDate.

这可以用Python完成吗?我尝试使用itertools并没有取得太大的成功.使用熊猫会不会是更好的方法?

Can this be done in Python? I've tried using itertools without much success. Would it be a better approach to use Pandas?

推荐答案

是的,请使用熊猫.这很棒.您可以使用groupby功能并按总和进行聚合,然后将输出转换为字典列表(如果正是您想要的话).

Yes, use pandas. It's great. You can use the groupby functionality and aggregate by sums, then convert the output to a list of dicts if that is exactly what you want.

import pandas as pd

data = [{"startDate": 123, "endDate": 456, "campaignName": 'abc',
         "campaignCfid": 789, "budgetImpressions": 10},
        {"startDate": 123, "endDate": 456, "campaignName": 'abc',
         "campaignCfid": 789, "budgetImpressions": 50},
        {"startDate": 456, "endDate": 789, "campaignName": 'def',
         "campaignCfid": 123, "budgetImpressions": 80}]

df = pd.DataFrame(data)

grouped = df.groupby(['startDate', 'endDate', 'campaignCfid',
                      'campaignName']).agg(sum)

print grouped.reset_index().to_dict('records')

此打印:

[{'startDate': 123L, 'campaignCfid': 789L, 'endDate': 456L, 'budgetImpressions': 60L, 'campaignName': 'abc'}, {'startDate': 456L, 'campaignCfid': 123L, 'endDate': 789L, 'budgetImpressions': 80L, 'campaignName': 'def'}]

这篇关于分组依据Python中字典的汇总列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆