【发布时间】:2020-03-31 06:48:40
【问题描述】:
我有一个 pandas.DataFrame 包含来自树的节点。该表如下所示:
╔═══════╦════════╦════════╦══════╗
║ index ║ color ║ name ║ head ║
╠═══════╬════════╬════════╬══════╣
║ 0 ║ red ║ Tom ║ 0 ║
║ 1 ║ blue ║ Lucy ║ 0 ║
║ 2 ║ green ║ Peter ║ 1 ║
║ 3 ║ red ║ Katy ║ 1 ║
║ 4 ║ green ║ Sam ║ 4 ║
║ 5 ║ orange ║ Linda ║ 2 ║
║ 6 ║ blue ║ Robert ║ 4 ║
║ 7 ║ brown ║ James ║ 6 ║
║ 8 ║ red ║ Betty ║ 7 ║
║ 9 ║ red ║ Amanda ║ 4 ║
║ 10 ║ black ║ Luke ║ 8 ║
╚═══════╩════════╩════════╩══════╝
head 列存储父节点的索引。它将创建一棵树,如下所示:
并且每个节点可以有 0+ 个子节点(不限于 2 个)。
我在选择一个人的时候想找另一个颜色相同的人。有3条规则:
- 如果他在同一个词干上,则选择最近的人
- 如果没有人被选中,则选择同一棵树中最近的人
- 如果没有人可以选择返回
None
例如,Katy 将与 Tom 匹配。由于与 Betty 相同的茎中不再有红色,因此将选择 Amanda。
有没有什么办法,而不是蛮力所有的组合来得到答案?
【问题讨论】:
-
什么是预期结果(
dataframe/dict等)?你能提供结果示例吗? -
我希望有
pd.DataFrame/ 包含 2 列的元组列表。它们是 2 个成对的名称(或索引)。