Python 熊猫df回路+;合并
大家好我需要你们的智慧 我还不熟悉python和pandas,我希望实现以下目标Python 熊猫df回路+;合并,python,pandas,Python,Pandas,大家好我需要你们的智慧 我还不熟悉python和pandas,我希望实现以下目标 df = pd.DataFrame({'code': [125, 265, 128,368,4682,12,26,12,36,46,1,2,1,3,6], 'parent': [12,26,12,36,46,1,2,1,3,6,'a','b','a','c','f'], 'name':['unknow','unknow','unknow','unknow','unknow','unknow','unknow','u
df = pd.DataFrame({'code': [125, 265, 128,368,4682,12,26,12,36,46,1,2,1,3,6], 'parent': [12,26,12,36,46,1,2,1,3,6,'a','b','a','c','f'], 'name':['unknow','unknow','unknow','unknow','unknow','unknow','unknow','unknow','unknow','unknow','g1','g2','g1','g3','g6']})
ds = pd.DataFrame({'code': [125, 265, 128,368,4682], 'name': ['Eagle','Cat','Koala','Panther','Dophin']})
我想在ds
dataframe中添加一个新列,其中包含最高父级的名称
作为第一行的示例:
code | name | category
125 | Eagle | a
“a”是df.code
和df.parent
125>12>1>a
由于最后一个父项不是数字而是字母,我想我必须使用正则表达式和than.merge from pandas来填充ds['category']
列。也可能使用应用函数,但它似乎有点超出我目前的知识
有人能帮我吗
在这方面,以下肯定不是最快的解决方案,但如果您的数据帧不太大,它就可以工作。首先从
df
的父代码创建一个字典,然后递归地应用该字典,直到结束
p = df[['code','parent']].set_index('code').to_dict()['parent']
def get_parent(code):
while par := p.get(code):
code = par
return code
ds['category'] = ds.code.apply(get_parent)
结果:
code name category
0 125 Eagle a
1 265 Cat b
2 128 Koala a
3 368 Panther c
4 4682 Dophin f
PS:get\u parent
使用赋值表达式(Python>=3.8),对于较旧版本的Python,您可以使用:
def get_parent(code):
while True:
par = p.get(code)
if par:
code = par
else:
return code
您的
df
定义不正确(ValueError:array必须都是相同的长度)确实很抱歉我编辑了这篇文章。非常感谢您,它工作得非常完美。我不太理解while循环,所以我必须研究它。即使第二个版本看起来更容易阅读;)