python - 向包含父节点符号的数据框添加列
问题描述
我正在使用来自CPC 网站的批量数据(CPC 有效符号列表) 。我已将 csv 读入 pandas df,前 30 行(超过 260K)是:
SYMBOL level not-allocatable additional-only
1 A 2 True False
2 A01 4 True False
3 A01B 5 True False
4 A01B 1/00 7 False False
5 A01B 1/02 8 False False
6 A01B 1/022 9 False False
7 A01B 1/024 9 False False
8 A01B 1/026 9 False False
9 A01B 1/028 9 False False
10 A01B 1/04 9 False False
11 A01B 1/06 8 False False
12 A01B 1/065 9 False False
13 A01B 1/08 9 False False
14 A01B 1/10 9 False False
15 A01B 1/12 9 False False
16 A01B 1/14 9 False False
17 A01B 1/16 8 False False
18 A01B 1/165 9 False False
19 A01B 1/18 9 False False
20 A01B 1/20 8 False False
21 A01B 1/22 8 False False
22 A01B 1/222 9 False False
23 A01B 1/225 10 False False
24 A01B 1/227 9 False False
25 A01B 1/24 8 False False
26 A01B 1/243 9 False False
27 A01B 1/246 9 False False
28 A01B 3/00 7 False False
29 A01B 3/02 8 False False
级别值创建层次结构。所以节点 A01B 1/00 是第 7 级,是 A01B 的子节点。A01B 1/02 是第 8 级,A01B 1/00 和 A01b 3/00 的孩子是 A01B 的孩子。
我想要的是一种方法来创建一个名为的新列PARENT
,其中包含SYMBOL
节点的直接父级。例如,我在 Excel 中编辑了 csv 以显示前几行的所需结果:
注意:没有 1、3 或 6 级符号。有多个 2 级符号。2 级符号没有父级,4 级符号的父级可以分配其上方的第一个 2 级符号,7 级符号的父级同样可以分配其上方的第一个 5 级符号。
编辑:我需要更好地解释如何确定节点的父节点。级别值和行位置是确定父级所需的全部内容。
我想使用 pandas 来完成这项工作,但我不知道如何开始。有接盘侠吗?谢谢
解决方案
在这个答案中,我假设您的直接父母始终在您自己的上方,因为这是您的预期输出和图表所暗示的。
有了这个假设,我们可以对每一行取最近的行,其级别低于该行:
import pandas as pd
data={"Symbol":["A", "A01", "A01B", "A01B 1/00", "A01B 1/02", "A01B 1/022", "B"], "level":[2,4,5,7,8,9,2]}
df=pd.DataFrame(data=data)
df['Parent'] = ''
for index, row in df.iterrows():
# We look at the potential parents
potential_parents = df.loc[df.index.isin([x for x in range(index)]) & (df['level'] < row['level']), 'Symbol']
# And we take the last one as our parent
if len(potential_parents) == 0:
df.loc[index, 'Parent'] = ''
else:
df.loc[index, 'Parent'] = potential_parents.iloc[-1]
输出 :
Symbol level Parent
0 A 2
1 A01 4 A
2 A01B 5 A01
3 A01B 1/00 7 A01B
4 A01B 1/02 8 A01B 1/00
5 A01B 1/022 9 A01B 1/02
6 B 2
推荐阅读
- node.js - JWT 令牌认证 websocket
- java - 有没有办法通过android studio中的代码编辑用户名和电子邮件?
- python-3.x - 文件名和域名的正则表达式-Python
- python - 使用联邦学习时训练模型的隐私安全
- c++ - 虚拟基类函数中派生类的大小
- c - c中的'if'测试条件 - 它是否评估?
- blazor - 如何在 balzor 服务器端将高分辨率图像转换为低图像
- c# - WPF ListView SelectedItem 未使用 DataTemplate 中的扩展器进行更新
- javascript - materialize css Start 方法未定义
- google-apps-script - 谷歌脚本中有没有办法通过文件夹名称的文件夹快捷方式访问文件夹内的文件?