【发布时间】:2020-12-02 09:05:09
【问题描述】:
我正在使用 pandas read_csv 从 2 个 csv 读取数据。
详细信息.csv
ID,VALID
P1,Yes
P2,No
P3,Yes
P4,No
Relations.csv
ParentID,ChildID
P1,C1
P1,C2
C1,C1A
C2,C2A
C1A,C1AA
P2,D1
P2,D2
D2,D2A
D2A,D2AA
P3,C4
P4,C5
现在我将两者都存储在单独的数据框中。我必须在Relationship 中检查来自Details 的ID,并为每个ID 找到其子级的所有级别(直到不再有子级)。如果 ID 的 VALID 列有 Yes,那么它的所有子项都应该有“VALID”,如果没有,那么这些就是“NOT VALID”。
预期输出
P1,VALID
C1,VALID
C2,VALID
C1A,VALID
C2A,VALID
C1AA,VALID
P2,NOT VALID
D1,NOT VALID
D2,NOT VALID
D2A,NOT VALID
D2AA,NOT VALID
P3,VALID
C4,VALID
P4,NOT VALID
C5,NOT VALID
目前我在 SQL 中执行此操作。我不知道如何在 python 中复制它。 pandas 中是否有可用的功能,或者我与for 循环有关。任何建议将不胜感激。
从这个question,我尝试了类似下面的方法,但它不起作用。
import pandas as pd
details = pd.read_csv('C:/Myfolder/Python/Details.csv')
relationship = pd.read_csv('C:/Myfolder/Python/Relationship.csv')
def nlevel(details.id, parent_dict=relationship.ParentID, _cache={0:0}):
if details.id in _cache:
return _cache[details.id]
return 1+nlevel(parent_dict[details.id],parent_dict)
【问题讨论】:
-
relation.csv 是有序的吗,我的意思是一个块中同一父级的所有父子关系:例如,你可以在 P3,C4 行之后有 P1,C3,因此 P1,C3 与其他 P1-child 关系不在同一个块中?
-
嗨@Ben.T。谢谢你的时间。不,它没有被订购。它可以是任何顺序。
-
也许看看这个post同时有人回答,它解决了你的问题,而不是一个完整的重复
标签: python python-3.x pandas recursion