我有这个数据框,
ID | 附件 |
---|---|
800 | 700 |
700 | 330 |
330 | 220 |
220 | 110 |
110 | NULL |
我想要这个结果
ID | Level1 | Level2 | Level3 | Level4 |
---|---|---|---|---|
800 | 700 | 330 | 220 | 110 |
有人可以帮助我,非常感谢。
答案 0 :(得分:0)
假设 df
是您的数据框变量,这样的事情应该可以工作。
ids = set(df[df["Attachment"].isna()]["ID"])
levels = {0: ids} # Gets the last level
df = df[~df["Attachment"].isna()]
i=0
while len(df)>0: # Gets the previous levels
i -= 1
mask = df["Attachment"].isin(levels[i+1])
ids = set(df[mask]["ID"])
levels[i] = ids
df = df[~mask]
levels_df = pd.DataFrame({f"Level{-i-j}": list(levels[-j]) for j in range(1-i)})
levels_df.rename(columns={"Level0": "ID"}, inplace=True)