检测所有行的父行并将它们的值添加为新列[关闭]

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

注意:检测直系父母的解决方案是here。但在这里我想要所有的父母。

我有一个包含多个层次结构列(由 - 分隔)和附加到它们的值的数据框,如下所示:

位置层次结构 行业等级 价值
0 美国 全部 V0
1 美国-加州 全部 V1
2 美国-加州 全高温 V2
3 美国-加利福尼亚-洛杉矶 全部 V3
4 美国-加利福尼亚-洛杉矶 全高温 V4
5 美国-加利福尼亚-洛杉矶 All-HT-SoftWare V5
6 美国-加利福尼亚-洛杉矶 全制造 V6

现在我想找到每一行的所有父母/祖先,并将它们的值添加到一个新列中。因此,预期输出如下:

位置层次结构 行业等级 价值 值-父-1 值-父-2 价值-父母-3 值-父母-4 价值父母5
0 美国 全部 V0 NA NA NA NA NA
1 美国-加州 全部 V1 V0 NA NA NA NA
2 美国-加州 全高温 V2 V0 V1 NA NA NA
3 美国-加利福尼亚-洛杉矶 全部 V3 V0 V1 V2 NA NA
4 美国-加利福尼亚-洛杉矶 全高温 V4 V0 V1 V2 V3 NA
5 美国-加利福尼亚-洛杉矶 All-HT-SoftWare V5 V0 V1 V2 V3 V4
6 美国-加利福尼亚-洛杉矶 全制造 V6 V0 V1 V2 V3 NA

我的 Dataframe 可能非常大,所以速度和内存是重要因素。所以,按行处理不会真正起作用。

逻辑:

每一行的父母/祖先是所有具有至少一个层次结构且至少向上一级的行。例如,位置:US-California-LA 和行业:All-HT 将有这些父母:

位置层次结构 行业等级
0 美国 全部
1 美国-加州 全部
2 美国-加州 全高温
3 美国-加利福尼亚-洛杉矶 全部

如果你想玩的话,这是创建数据框的代码。

import pandas as pd

df = pd.DataFrame({'location hierarchy': ['US', 'US-California', 'US-California', 'US-California-LA', 'US-California-LA', 'US-California-LA', 'US-California-LA'],
                   'industry hierarchy': ['All', 'All', 'All-HT', 'All', 'All-HT', 'All-HT-SoftWare', 'All-Manufacturing'],
                   'value': ['V0', 'V1', 'V2', 'V3', 'V4', 'V5', 'V6']})
python pandas dataframe hierarchy
© www.soinside.com 2019 - 2024. All rights reserved.