gpt4 book ai didi

python - Pandas :合并两个具有重复行的数据框

转载 作者:太空宇宙 更新时间:2023-11-04 02:20:04 26 4
gpt4 key购买 nike

简短问题在 Pandas 中,合并两个数据帧最方便的方法是什么,以便左侧数据框中的所有条目都从右侧数据框中接收到第一个匹配值?

较长的问题假设我有两个电子表格:people.csvorders.csv . people.csv包含有关此人的几列信息,而 orders.csv包含该人的全名,以及一行该人下的订单数。

我需要创建第三个 csv,output.csv其中包含 people.csv 中的所有列加上来自 output.csv 的一列匹配两个电子表格中的其中一列(在一个电子表格中称为“FULL_NAME”,在另一个电子表格中称为“CUSTOMER_FULL_NAME”)

people.csv按 FULL_NAME 字段排序,但包含重复的行,因此在 FULL_NAME 列中有多个带有“John Smith”的行。 orders.csv 中也有重复行但重复次数不同(例如,people.csv 可能有 4 个 John Smith 条目,但 orders.csv 可能只有两个)。

如果我使用下面的代码:

people = pd.read_csv('people.csv')
orders = pd.read_csv('orders.csv')
full = pd.merge(
people,
orders,
left_on='FULL_NAME',
right_on='CUSTOMER_FULL_NAME',
)
result.to_csv("output.csv")

...我得到一个 CSV,其中 FULL_NAME 字段中只有两行带有“John Smith”的行具有 John Smith 的订单数。正下方的行在该字段中没有值。那是因为output.csv只包含两行与 John Smith 的匹配值,而 people.csv有 4 个。

Pandas 中是否有一种方便的方法将一列的值设置为另一个数据框中的第一个匹配列,这样所有 4 个条目都包含来自 orders.csv 的第一个匹配值?

编辑我的脚本的完整当前版本,返回包含未设置预期值的行的 CSV:

import pandas as pd

community = pd.read_csv("orders.csv")
full = pd.read_csv("people.csv")
result = pd.merge(
full,
community.drop_duplicates(subset=['FULL_NAME'], keep='first'),
left_on="CUSTOMER_FULL_NAME",
right_on="FULL_NAME",
how='left',
)
result.to_csv("output.csv")

所以我想我在这里遗漏了其他东西,因为一些行以预期的方式匹配。这是输出文件中的示例:

ID      FULL_NAME   EMPLOYER            DIVISION            ORDER #
7350 John Smith RiteAid Clinical Research 25
7351 John Smith RiteAid Clinical Research 25
7352 John Smith Costco Sales
7353 John Smith Costco Sales

此 John Smith 行在 orders.csv 中没有重复值文件,所以我认为这是可行的,因为有两行得到了它。但是,我没有在列出 Costco 而不是 RiteAid(或其他不同字段)的 John Smith 行上找到匹配项。这让我感到惊讶,因为我认为索引检查仅针对 FULL_NAME 字段。

关于为什么其他行可能没有填写的任何想法?

最佳答案

您可以使用 drop_duplicatessubset=['CUSTOMER_FULL_NAME']mergehow='left' 保持所有行来自 people 例如:

full = pd.merge(
people,
orders.drop_duplicates(subset=['CUSTOMER_FULL_NAME'], keep='first'), #here the differance
left_on='FULL_NAME',
right_on='CUSTOMER_FULL_NAME',
how='left' #and add the how='left'
)

因此 orders.drop_duplicates(subset=['CUSTOMER_FULL_NAME'], keep='first') 将只包含一次每个名称,并且在 merge 期间,匹配将只有这个唯一的名字

关于python - Pandas :合并两个具有重复行的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51845977/

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