繁体   English   中英

按行分组时如何合并熊猫数据框的字典

How to merge dictionaries of a pandas dataframe when grouping by rows

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个形式的数据框:

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,那么是否可以像这样合并字典? 我只是没有办法告诉它接受下一个字典并将其合并(考虑到它可能不存在并且是Nan)。

非常感谢!

如果解决方案不是超级慢,那也很好,因为我必须对大型数据集进行处理:/

1 个回复

你快到了。 您只需要使用一个自定义函数即可合并非空序列值之间的字典:

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}
4 在Pandas中对数据框的行进行分组

我目前有一个名为UniqueItems的数据UniqueItems ,它看起来像这样(我将其缩短是因为它的清单很长): 我对值进行了排序,以得到一个名为UniqueItem_inorder的新数据UniqueItem_inorder ,该数据UniqueItem_inorder通过以下代 ...

5 熊猫基于分组合并行

假设我有一个如下所示的数据框: 我需要合并col3 = xx和xy ,这些行按col1分组,因此生成的数据帧如下所示: 有没有一种简单的方法来做这个pandas ? ...

6 熊猫数据框在行上合并

我有一个名为df的数据框,它看起来如下所示,我想将5行转换为合并它们的单行。 但是df=df.groupby(df.index).sum()似乎不适用于前两列,不知道为什么以及如何纠正它? ...

7 如何在熊猫中合并具有不同值的数据框行

我有以下数据框,其中包含用户提出的请求数据: 我想按user_id合并数据帧行,因此,如果用户至少有一个请求已批准或已收缩,则结果状态必须为已批准,否则必须为已被拒绝。 例如,对于上面的数据,结果数据框应如下所示: ...

8 如何合并数据帧pandas中的两行

我有一个包含两行的数据框,我想将这两行合并为一行。 df如下: 我试图创建两个单独的数据帧并将它们与df.merge(df2)合并而没有成功。 结果应如下 有任何想法吗? 提前谢谢可以df.update成为可能的解决方案吗? 编辑: 这适用于上面的例子。 但 ...

10 跨行对Pandas数据框进行分组

我有这样的csv: 将其读入pandas数据框df后,我想分两步进行汇总: 第1步: 首先,我总结一下金额: 然后,我想按每个客户端名称进行汇总,这样,如果涉及多个客户端(如第5组),则必须在Comp1和Comp2之间平均分配5.1375。 尝试过这种方式: ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM