我的数据框的格式为:
.highlight{
color:red
}
在合并“ area1”和“ area2”的字典时,我想对所有具有匹配的“ id”和“ date”的行进行分组。意思是我想得到:
id date area1 area2
01 20181010 {'a': 10, 'b': 15} {'a': 20, 'c': 13}
01 20181010 {'c': 17} {'b': 12}
02 20180506 {'a': 2, 'b': 3} {'c': 4}
02 20180506 Nan {'a': 18}
首先我正在尝试类似的东西:
id date area1 area2
01 20181010 {'a': 10, 'b': 15, 'c': 17} {'a': 20, 'c': 13, 'b': 12}
02 20180506 {'a': 2, 'b': 3} {'c': 4, 'a': 18}
很显然,这仅获得区域1和区域2的第一个字典。 但是,如果我正确理解,可以将函数传递给agg,那么是否可以像这样合并字典? 我只是没有办法告诉它接受下一个字典并将其合并(考虑到它可能不存在并且是Nan)。
非常感谢!
如果解决方案不是超级慢,那也很好,因为我必须对大型数据集进行处理:/
答案 0 :(得分:0)
您快到了。您只需要使用一个自定义函数即可将非空序列值之间的字典合并:
def merge_dicts(x):
return {k: v for d in x.dropna() for k, v in d.items()}
res = df.groupby(['id', 'date'], as_index=False).agg(merge_dicts)
print(res)
id date area1 area2
0 01 20181010 {'a': 10, 'b': 15, 'c': 17} {'a': 20, 'c': 13, 'b': 12}
1 02 20180506 {'a': 2, 'b': 3} {'c': 4, 'a': 18}