作为一个例子,我有下表:
| 组别名称|父组ID|组ID|
| - ------|- ------|- ------|
| 所有食品||三个|
| 意大利食品|三个|1个|
| 面食|1个|第二章|
| 意大利面|第二章|四个|
组ID是任意分配的。此表表示一系列嵌套组。您可以看到,"Spaghetti"的父组ID为2,与"Pasta"的组ID相对应。而"Pasta"的父组ID为1,表示其父组是意大利食品。
我希望能够遍历每一行,确定父组ID,然后按照父组ID-组ID链查找该行组的顶级父组名称。对于第5行"Spaghetti",我希望查找"All Foods"是其顶级父组名称。
到目前为止,我已经尝试使用Pandas的外部加入功能无济于事。任何建议将非常感谢。
我设想的流程是这样的:
1.在表的右侧添加一列
1.遍历每行
1.查找组ID值
1.在parentID列中搜索groupID值
1.重复此步骤,直到parentID值为空
1.将最后一行的组名添加到原始行的附加列中
1条答案
按热度按时间iklwldmw1#
您可以使用
while..loop
迭代 Dataframe 中的每一行,并使用.loc
方法访问基于Group ID
和Parent Group ID
列的特定行。以下是如何实现此操作的示例:| | 组别名称|父组ID|组ID|
| - ------|- ------|- ------|- ------|
| 无|所有食品|钠氮|三个|
| 1个|意大利食品|三个|1个|
| 第二章|面食|1个|第二章|
| 三个|意大利面|第二章|四个|
| 四个|寿司|六个|五个|
| 五个|鱼|七|六个|
| 六个|日本料理|钠氮|七|
| | 组别名称|父组ID|组ID|顶级父组名称|
| - ------|- ------|- ------|- ------|- ------|
| 无|所有食品|钠氮|三个||
| 1个|意大利食品|三个|1个|所有食品|
| 第二章|面食|1个|第二章|所有食品|
| 三个|意大利面|第二章|四个|所有食品|
| 四个|寿司|六个|五个|日本料理|
| 五个|鱼|七|六个|日本料理|
| 六个|日本料理|钠氮|七||
解释
该代码向名为
Top-level Parent Group Name
的 Dataframe 添加一个新列,并使用每行对应的顶级父组名填充该列。对于'Spaghetti'
行,顶级父组名将为'All Foods'
。备注
需要注意的是,此代码假定每个
Group Name
值只有一个直接父组。如果一个Group Name
(如'Pasta'
)在一行中的直接父组为'Italian Foods'
,而在另一行中的直接父组为'Sushi'
,则代码将无法按预期工作。此外,代码将处理Parent Group ID
列中的NaN值,因此不会导致错误。