gpt4 book ai didi

python - 使用 python (pandas) 对 CSV 文件进行条件合并

转载 作者:太空宇宙 更新时间:2023-11-04 03:53:27 24 4
gpt4 key购买 nike

我正在尝试合并具有相同架构的 >=2 文件。
这些文件将包含重复的条目,但行不会相同,例如:

file1:
store_id,address,phone
9191,9827 Park st,999999999
8181,543 Hello st,1111111111

file2:
store_id,address,phone
9191,9827 Park st Apt82,999999999
7171,912 John st,87282728282

Expected output:
9191,9827 Park st Apt82,999999999
8181,543 Hello st,1111111111
7171,912 John st,87282728282

如果你注意到:9191,9827 Park st,999999999 和 9191,9827 Park st Apt82,999999999 基于 store_id 和电话是相似的,但我从 file2 中提取它,因为地址更具描述性。

store_id+phone_number 是我查找位置和查找重复项的复合主键(store_id 足以在上面的示例中找到它,但我需要一个基于多个列值的键)

问题:
- 我需要合并多个具有相同架构但具有重复行的 CSV 文件。
- 行级别合并应该具有根据行的值选择行的特定值的逻辑。就像从文件 1 中提取的电话和从文件 2 中提取的地址一样。
- 1 个或多个列值的组合将定义行是否重复。

这可以使用 pandas 实现吗?

最佳答案

将它们粉碎在一起的一种方法是使用合并(在 store_id 和数字上,如果它们是索引,那么这将是一个连接而不是合并):

In [11]: res = df1.merge(df2, on=['store_id', 'phone'], how='outer')

In [12]: res
Out[12]:
store_id address_x phone address_y
0 9191 9827 Park st 999999999 9827 Park st Apt82
1 8181 543 Hello st 1111111111 NaN
2 7171 NaN 87282728282 912 John st

然后您可以使用 where选择 address_y(如果存在),否则选择 address_x:

In [13]: res['address'] = res.address_y.where(res.address_y, res.address_x)

In [14]: del res['address_x'], res['address_y']

In [15]: res
Out[15]:
store_id phone address
0 9191 999999999 9827 Park st Apt82
1 8181 1111111111 543 Hello st
2 7171 87282728282 912 John st

关于python - 使用 python (pandas) 对 CSV 文件进行条件合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20060562/

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