使用pandas一起添加dicts列表

时间:2018-05-09 20:27:04

标签: python pandas

这是对此问题的跟进:Using pandas to add list elements together。我想将此函数概括为在数组中获取唯一元素,即使它们不是'hashable'类型,例如dict。这是输入数组:

items = [ 
{
    'FirstName': 'David',
    'LastName': 'Smith',
    'Residence': [{'Place': 'X', 'Age': 22}, {'Place': 'Y', 'Age': 23}]
},

{
    'FirstName': 'David',
    'LastName': 'Smith',
    'Residence': [{'Place': 'Z', 'Age': 20}]
},

{
    'FirstName': 'David',
    'LastName': 'Smith',
    'Residence': [{'Place': 'Z', 'Age': 20}]
},
{
    'FirstName': 'Bob',
    'LastName': 'Jones',
    'Residence': [{'Place': 'Z', 'Age': 20}]
}
]

我想将独特的Residences(dicts)加在一起,所以最终结果将是:

items = [ 
{
    'FirstName': 'David',
    'LastName': 'Smith',
    'Residence': [{'Place': 'X', 'Age': 22}, {'Place': 'Y', 'Age': 23}, {'Place': 'Z', 'Age': 20}]
},

{
    'FirstName': 'Bob',
    'LastName': 'Jones',
    'Residence': [{'Place': 'Z', 'Age': 20}]
}
]

我会使用的SQL是这样的:

SELECT FirstName, LastName, GROUP_CONCAT(DISTINCT **Residence Object**)
FROM items
GROUP BY FirstName, LastName

我如何在pandas中执行此操作,以便在尝试获取不同的数组元素时不会出现unhashable type错误?

3 个答案:

答案 0 :(得分:1)

除此之外,我不认为熊猫会给你任何真正的好处:

from collections import defaultdict

d = defaultdict(list)
for e in items:
    d[(e['FirstName'], e['LastName'])].append(e['Residence'])
items = [{'FirstName': k[0], 'LastName': k[1], 'Residence': v} for k, v in d.items()]

答案 1 :(得分:1)

来自base_id gist_uuid_ops WITH =

的解决方案
(base_id::text) gist_text_ops WITH =

答案 2 :(得分:0)

你可以做到

df.groupby(["FirstName", "LastName"])["Residence"].apply(sum)\
.apply(lambda x: [i for n, i in enumerate(x) if i not in d[n + 1:]]).reset_index()\
.to_dict(orient='r')

[{'FirstName': 'Bob',
  'LastName': 'Jones',
  'Residence': [{'Place': 'Z', 'Age': 20}]},
 {'FirstName': 'David',
  'LastName': 'Smith',
  'Residence': [{'Place': 'X', 'Age': 22},
   {'Place': 'Y', 'Age': 23},
   {'Place': 'Z', 'Age': 20}]}]