识别 Pandas 中正确的字符串顺序

问题描述 投票:0回答:1

我有一个数据框,如下所示,显示每行中不同实体的关系。

孩子 家长 Ult_Parent 全家
A032 A001 A039 A001、A032、A039、A040、A041、A043、A043、A045、A046

在“Full_Family”列中,它显示整个家谱从小到大的正确层次结构,而不仅仅是该特定行中的实体。但要注意的是,并非“Full_Family”中的每个实体都会出现在“Child/Parent/Ult_Parent”中,因为“Full_Family”数据来自其他源。

这里我有2个问题需要解决:

  1. Child/Parent/Ult_Parent顺序不正确,如何根据“Full_Family”列来识别正确的顺序?
  2. 如果可能的话,我是否还可以在整个表而不是每一行中识别一个族的正确 Ult_Parent 。这个正确的 Ult_Parent 需要是出现在 Child/Parent/Ult_Parent 列中的实体。

以下是示例和理想结果:

孩子 家长 Ult_Parent 全家 正确_顺序 正确_Ult_Parent_per_Family
A032 A001 A039 A001、A032、A039、A040、A041、A043、A043、A045、A046 A001、A032、A039 A043
A001 A043 A039 A001、A032、A039、A040、A041、A043、A043、A045、A046 A001、A039、A043 A043

虽然 A046 是该族中的最终父级,但它没有出现在该数据帧的 Child/Parent/Ult_Parent 中,因此在这种情况下,每个族的正确最终父级是 A043。

感谢您的帮助。

pandas string dataframe hierarchy string-matching
1个回答
0
投票

IIUC,你可以使用这个方法:

df["Correct_Order"] = df.apply(
    lambda row: ", ".join(sorted([row["Parent"], row["Child"], row["Ult_Parent"]])),
    axis=1,
)

df["Correct_Ult_Parent_per_Family"] = df["Parent"].max()
  Child Parent Ult_Parent                                        Full_Family     Correct_Order Correct_Ult_Parent_per_Family
0  A032   A001       A039  A001, A032, A039, A040, A041, A043, A043, A045...  A001, A032, A039                          A043
1  A001   A043       A039  A001, A032, A039, A040, A041, A043, A043, A045...  A001, A039, A043                          A043
© www.soinside.com 2019 - 2024. All rights reserved.