我有一个看起来像这样的数据框。 我通过合并我已经拥有的具有所有相同标头的两个数据帧来获得它。 问题是我有一些行出现在两个数据框中,需要将它们组合起来。 指数 钾 e_K 伏 e_V 1 ...
提示:本站收集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)。
非常感谢!
如果解决方案不是超级慢,那也很好,因为我必须对大型数据集进行处理:/
你快到了。 您只需要使用一个自定义函数即可合并非空序列值之间的字典:
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}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.