Python数据框字典聚合与sum合并失败

Posted

技术标签:

【中文标题】Python数据框字典聚合与sum合并失败【英文标题】:Python dataframe dictionary aggregation merging with sum failed 【发布时间】:2016-03-08 18:00:25 【问题描述】:

假设我有这样的数据框:

da1 = DataFrame('id':['bub','char', 'bub'],
                 'a':['t1':1,'t2':3,
                      't1':3,
                      't2':1])
print da1
                      a    id
0  u't2': 3, u't1': 1   bub
1            u't1': 3  char
2            u't2': 1   bub

我想按键汇总'a'列的内容,按'id'分组,我尝试的是:

print da1.groupby('id')\
        .aggregate(
            'a': lambda x: DataFrame.from_dict(x).sum().to_dict())
id                                                    a 
bub   <built-in method values of dict object at 0x7f...
char  <built-in method values of dict object at 0x7f...

但如果我这样做:

bub = ['t1':1,'t2':3, 't2':1]
print DataFrame.from_dict(bub).sum().to_dict()
't2': 4.0, 't1': 1.0

我第一次得到我想要的, 我错过了什么?

upd:我也试过使用 Counter(),没有成功...

from collections import Counter
print dict(sum((Counter(dict(x)) for x in bub),Counter()))
't2': 4, 't1': 1

print da1.groupby('id')\
            .aggregate(
                'a': lambda dic: dict(sum((Counter(dict(x)) for x in dic),Counter())))
id                                                    a 
bub   <built-in method values of dict object at 0x7f...
char  <built-in method values of dict object at 0x7f...

【问题讨论】:

我怀疑您的第一个数据框 da1 是否是您想要的:带有值的 dicts 列通常不是您放入数据框的内容。 你是对的!我实际上将使用非常相似的结构将此类字段插入数据库。 【参考方案1】:

我找到了解决这个问题的方法,可能效率很低,但它对我有用。

我发现issue 在使用 apply 方法时出现了类似的错误,并且该错误已修复。由于他们固定为 apply 我使用 apply 函数来做我想做的事。

print DataFrame('visitorId':da1.groupby('id', as_index=False).groups.keys(),
           'a':da1.groupby('id', as_index=False)\
                        .apply(lambda dic:
                                dict(sum((Counter(dict(x)) for x in dic.a),
                                          Counter()))))

                      a visitorId
0  u't2': 4, u't1': 1       bub
1            u't1': 3      char

我对分组数据使用了 apply 方法,获取“标识符”的最简单方法是获取组键。如果您对如何更有效地执行此操作有任何建议,请告诉我!

【讨论】:

以上是关于Python数据框字典聚合与sum合并失败的主要内容,如果未能解决你的问题,请参考以下文章

如何在Python中合并字典中的所有数据框[重复]

字典键中数据帧的外部合并

在数据框字典中合并数据框

合并两个具有聚合列值的数据框作为结果

SQL——连接查询聚合函数开窗函数

python--pandas合并与连接