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合并失败的主要内容,如果未能解决你的问题,请参考以下文章