这是对此问题的跟进: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
错误?
答案 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}]}]