注意:检测直系父母的解决方案是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']})