gpt4 book ai didi

python - 你如何根据特定的键值对比较两个 Pandas 系列?

转载 作者:行者123 更新时间:2023-12-04 09:34:44 26 4
gpt4 key购买 nike

我有2个pandas系列字典如下:

series_1 = [{'id': 'testProd_1', 'q1':'Foo1', 'q2': 'Bar1'},
{'id': 'testProd_2', 'q1':'Foo2', 'q2': 'Bar2'},
{'id': 'testProd_3', 'q1':'Foo3', 'q2': 'Bar3'},
{'id': 'testProd_5', 'q1':'Foo5', 'q2': 'Bar5'}
]
series_2 = [{'q1':'Foo1', 'q2': 'Bar1'},
{'q1':'Foo2', 'q2': 'Bar2'},
{'q1':'Foo3', 'q2': 'Bar3'},
{'q1':'Foo4', 'q2': 'Bar4'},
{'q1':'Foo5', 'q2': 'Bar{5}'}]
我正在尝试比较两个 Pandas 系列,并将 series_1 中的 id 提供给所有匹配的 series_2 dicts。
expected_result = [{'id': 'testProd_1', 'q1':'Foo1', 'q2': 'Bar1'},
{'id': 'testProd_2', 'q1':'Foo2', 'q2': 'Bar2'},
{'id': 'testProd_3', 'q1':'Foo3', 'q2': 'Bar3'},
{'id': 'testProd_5', 'q1':'Foo5', 'q2': 'Bar{5}'}]
系列相等不起作用,因为一个系列对每个字典都有一个额外的键值对('id')。我是否必须遍历每个单独的条目?获得预期结果的最有效方法是什么?
我正在处理 2 个大型数据集,我试图将一个系列的 id 链接到另一个系列。数据基本相同,但有时某些键值对中的值会出现一些错误字符(例如:{5}、(5)、{ex.5})。
有什么建议?
谢谢

最佳答案

所以看起来你想要使用的是 merge .据我了解,您想在 'q1' 键上找到两个数据帧的内部连接。如果是这样,那么合并绝对是适合您的功能。它的使用方式如下:series_join = series_1.merge(series_2, on='q1')有了这个,它会找到 q1 的交集,并且只选择匹配的数据对。如果您想同时加入 q1q2 ,您可以简单地在此处传入一个数组(尽管这不会给出您想要的输出,因为 Bar5 无法与 Bar{5} 进行比较,不幸的是:series_join = series_1.merge(series_2, on=['q1', 'q2'])至于清除数据中的错误值以便以这种方式进行比较,我建议首先执行清理步骤,因为主合并步骤没有关于如何比较数据值的太多自定义。
输出将包含一组重复的列,但无论如何您都可以简单地忽略这些列:

           id    q1  q2_x    q2_y
0 testProd_1 Foo1 Bar1 Bar1
1 testProd_2 Foo2 Bar2 Bar2
2 testProd_3 Foo3 Bar3 Bar3
3 testProd_5 Foo5 Bar5 Bar{5}
这是一个 repl它运行的地方。
编辑:保留重复项
合并的默认功能是它将保留两个表中的所有重复键。此处操作重复项的问题在于,pandas 不知道哪一行是预期的查找行,因此它只会为每个组合创建一对。如以下示例(系列 1、2,然后加入):
           id    q1    q2
0 testProd_1 Foo1 Bar1
1 testProd_2 Foo2 Bar2
2 testProd_3 Foo3 Bar3
3 testProd_5 Foo5 Bar5
4 testProd_6 Foo5 Bar6
q1 q2
0 Foo1 Bar1
1 Foo2 Bar2
2 Foo3 Bar3
3 Foo4 Bar4
4 Foo5 Bar{5}
5 Foo5 Bar{6}
id q1 q2_y
0 testProd_1 Foo1 Bar1
1 testProd_2 Foo2 Bar2
2 testProd_3 Foo3 Bar3
3 testProd_5 Foo5 Bar{5} <<< [3 testProd_5 Foo5 Bar5] + [4 Foo5 Bar{5}]
4 testProd_5 Foo5 Bar{6} <<< [3 testProd_5 Foo5 Bar5] + [5 Foo5 Bar{6}]
5 testProd_6 Foo5 Bar{5} <<< [4 testProd_6 Foo5 Bar6] + [4 Foo5 Bar{5}]
6 testProd_6 Foo5 Bar{6} <<< [4 testProd_6 Foo5 Bar6] + [5 Foo5 Bar{6}]
因此,没有一种简单的方法可以说“选择第二个表的第一行”,但您可以做的只是使用类似 drop_duplicates 的函数预先删除第二个表中的重复项。 .

关于python - 你如何根据特定的键值对比较两个 Pandas 系列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62641598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com