我有一个要读取的数据表(来自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列是姓名(“名字”或“姓氏”),电子邮件地址和该人拥有的金额。
我的程序的目标是合并同一用户的信息。挑战在于确定哪些用户实际上是同一个人。例如,前3行是同一个人。这是因为“ john doe”具有两个电子邮件地址和两个不同的名称。我如何确定某人是否与另一人“相同”的逻辑如下:
比较的优先级应为:
合并时,我们需要跟踪:
因此,如果我根据上述数据迭代地进行计算,则第一次迭代(按名称合并)会产生以下结果:
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脚本。我为此尝试了各种尝试,但总是很讨厌。我最终遇到了大量嵌套循环或列表理解。我还没有任何工作,所以很遗憾我没有什么可分享的。
我的直觉是在某处有一个蟒蛇皮的一线或两线衬垫。
答案 0 :(得分:0)
一种简单的方法是使用ID,名称,电子邮件和金钱创建字典。并针对每一行搜索名称或电子邮件是否已在词典中。如果是,则更新字典,否则使用新ID将名称电子邮件添加到字典中。 该代码将如下所示:
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