【问题标题】:Establish Parent-Child Relationship Using Nested For-Loops between Two Series in Pandas Data frame使用 Pandas 数据框中两个系列之间的嵌套 For 循环建立父子关系
【发布时间】: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 语句的列表理解

  1. 感谢任何其他改进此代码的批评或建议。

链接到数据框示例

【问题讨论】:

标签: python pandas nested


【解决方案1】:

正如它所说,它不喜欢 2 个参数 - 在这种情况下,一次将 2 个字符串添加到列表中。

mat.append(str(i))
mat.append(str(j))

还值得添加 tryexcept 语句(如果您遇到困难,请用 Google 搜索)以使代码更加健壮 - 因此如果一些无效数据进入数据库,程序不会崩溃,但做你想做的事。

【讨论】:

  • 感谢您的输入,但我如何确保它们已加入。如果连接两个字符串,我需要确保它们按顺序排列。我们的想法是将这些数字分组为一个家庭。
【解决方案2】:

用新答案回复评论:

我认为按照您的看法,最好不要使用字典,而不是列表,这样您就可以在相同的参数中存储 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)})

这也使得寻找一个特定的人更容易,而不是找到那个人然后确定是链接之前还是之后的人。

【讨论】:

    猜你喜欢
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    相关资源
    最近更新 更多