Python 按行分组时如何合并数据帧的词典

Python 按行分组时如何合并数据帧的词典,python,pandas,dictionary,dataframe,pandas-groupby,Python,Pandas,Dictionary,Dataframe,Pandas Groupby,我有一个如下形式的数据框: 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} 我想在合并“area1”和“area2”字典的同

我有一个如下形式的数据框:

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}
我想在合并“area1”和“area2”字典的同时,将所有行与匹配的“id”和“date”进行分组。意思是我想得到:

  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}
首先,我尝试的是:

merged_df = df.groupby(["id", "date"],as_index=False).agg({'area1':'first', 'area2': 'first'}) 
很明显,这只得到了区域1和区域2的第一条指令。 但是如果我理解正确的话,可以将一个函数传递给agg,那么可以像这样合并字典吗? 我只是没有办法告诉它接受下一个dict并合并它(考虑到它可能不存在并且是一个Nan)

非常感谢


啊,如果解决方案不是超慢,那也太好了,因为我必须对一个大数据集进行处理://p>您就快到了。您只需使用一个自定义函数,该函数可跨非空系列值合并字典:

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}

您希望如何处理重叠的关键点?首先展平数据帧可能会更容易(如果有固定数量的可能关键点)。只需用NaN填充不存在的值。然后,您可以使用所有正常的连接技术,让您完全控制(如果两者都有值,则更喜欢哪个数据帧等)。@user3483203将不会有重叠键:)@Graipher我明白了,“问题”是“area1”下的字典键与“area2”下的字典键相同。所以我必须将它展平,将区域附加到键,以形成列的名称,对吗?比如“area1_a”、“area1_b”、“area2_a”、“area2_b”等等。我有点想用字典来代替,但如果这不是一个好的做法,那么我会改变你的建议:)