【发布时间】:2018-06-11 02:36:05
【问题描述】:
让我从我想要实现的主要目标开始。我在两组类别的数据库中有一组 14 位数的数字(放在“Hier”下)父或子前 60814703140000:父 如果最后 4 位数字包含一个数字,例如 60814703140100:孩子。 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 语句的列表理解
- 感谢任何其他改进此代码的批评或建议。
链接到数据框示例
【问题讨论】:
-
请发布您的数据框的小样本,请参阅minimal reproducible example