让我先从我想要实现的主要目标开始。我有一组数字,在两组类别的数据库中是14位数(放在'Hier'下)父或子ex 60814703140000:父 如果最后4位数字包含一个数字ex 60814703140100:Child。 enter image description here
我正在尝试在Pandas Python中开发一个算法,该算法根据父/子共享前10位数的事实知道父母与后续子女的群体。
我的思考过程是:从pandas数据库中提取两个向量:
Par=Newdf[Newdf['Hier']=='Parent']
Chi=Newdf[Newdf['Hier']=='Child']
然后使用嵌套for循环迭代这两个系列:如果Par中元素的前10位数字等于Chi中元素的前10位数:那么它们属于同一族并将它们添加到我的列表中以某种方式给出关联的父子列表: [(60814703140000,60814703140100),(60814702350000,60814702350200),(60814711630000,60814711630500),...]
mat = []
for i in Par['UWI']:
for j in Chi['UWI']:
if str(i)[0:9] == str(j)[0:9]:
mat.append(str(i),str(j))
mat
然而,这段代码给我一个错误,因为我在同时添加列表中的多个项目时遇到问题。
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-51-8b0ab9fd7ce5> in <module>()
7 for j in Chi['UWI']:
8 if str(i)[0:9] == str(j)[0:9]:
----> 9 mat.append(str(i),str(j))
10
11 mat
TypeError:append()只接受一个参数(给定2个)
我的问题是:
1.添加相关父子关系的正确语法
2.父母与孩子的关系不是1:1,因为我父母可能有一个以上的孩子,我也希望将其纳入其中。
3.有更好的方法吗?例如,我知道我可以使用列表推导但由于添加了if语句,我没有得到正确的列表。 所以“我如何使用列表理解与两个for循环和一个if语句
链接到数据框示例
答案 0 :(得分:0)
正如它所说,它不喜欢2个参数 - 在这种情况下,一次将2个字符串添加到列表中。
mat.append(str(i))
mat.append(str(j))
还可以在{(1}}和try
语句中添加一个except
语句(如果你遇到困难,可以谷歌)以使代码更加健壮 - 所以一些无效数据会进入数据库的程序不会崩溃,而是做你想做的事。
答案 1 :(得分:0)
使用新答案回复评论:
我认为你看它的方式,最好是,而不是列表使用字典,这样你就可以在相同的参数中存储2个项目。
mat = {}
for i in Par['UWI']:
for j in Chi['UWI']:
if str(i)[0:9] == str(j)[0:9]:
mat.update({str(i):str(j)})
这也使得寻找一个特定的人更容易,而不是找到那个人,然后再找出那个人之前或之后的那个人。