gpt4 book ai didi

python - 如何根据某些条件合并数据集的行

转载 作者:太空宇宙 更新时间:2023-11-03 20:25:54 25 4
gpt4 key购买 nike

我有一个数据表(来自 CSV 文件),我想读入该数据表并使用一些用于合并行的逻辑进行处理。以下是数据示例:

john,john@domain.com,50
john doe,john@domain.com,10
john doe,john.doe@domain.com,100
mary,mary@domain.com,500

此数据表示一个 3 列 4 行的数据表。第 1 列是姓名(“名字”或“名字、姓氏”)、电子邮件地址以及该人拥有的金额。

我的程序的目标是整契约(Contract)一用户的信息。挑战在于确定哪些用户实际上是同一个人。例如,前 3 行是同一个人。这是因为“john doe”有两个电子邮件地址和两个不同的姓名。我如何确定某人是否与另一个人“相同”的逻辑如下:

  1. 如果两个名字的名字和姓氏相同,则他们是同一个人。我们忽略没有姓氏的名字的比较,因为这太模糊了。
  2. 如果两行具有相同的电子邮件地址,则表明是同一个人。即使名称不同也没关系。

比较的优先级应该是:

  1. 首先匹配名称
  2. 其次匹配电子邮件地址

当我们整合时,我们需要跟踪:

  1. 一个人有多个名字
  2. 一个人有多个已知的电子邮件地址
  3. 他们拥有的总金额

因此,如果我根据上面的数据集迭代地解决这个问题,第一次迭代(按名称合并)会产生以下结果:

Name      | Email(s)                             | Money
-----------------------------------------------------------
john | john@domain.com | 50
john doe | john@domain.com, john.doe@domain.com | 110
mary | mary@domain.com | 500

第二次迭代,通过电子邮件进行整合,产生了最终结果:

Name(s)         | Email(s)                             | Money
-----------------------------------------------------------
john doe, john | john@domain.com, john.doe@domain.com | 160
mary | mary@domain.com | 500

我想编写一个 Python 3 脚本来执行这种类型的数据合并。我尝试过各种尝试,但总是变得非常糟糕。我最终得到了大量的嵌套循环或列表理解。我还没有完成任何工作,所以遗憾的是我没有任何东西可以分享。

我的直觉是,有一个Python风格的单行或两行代码可以做到这一点。

最佳答案

一个简单的方法是创建一个包含 ID、姓名、电子邮件和金钱的字典。对于每一行,搜索姓名或电子邮件是否已在字典中。如果是,则更新字典,否则使用新的 id 将名称 email 添加到字典中。代码如下所示:

data_dict = {'1':{'Names':['john doe', 'john'], 'Emails':['john.doe@domain.com'], 'Money':0},
'2':{'Names':['mary'], 'Emails':['mary@domain.com'], 'Money':0}
}
for name in df[name]:
for key in data_dict:
if name in data_dict[key]['Names']:
#update data_dict
else:
# add to data_dict

关于python - 如何根据某些条件合并数据集的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57827457/

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