我有以下数据框:
id;name;parent_of
1;John;3
2;Rachel;3
3;Peter;
其中“ parent_of”列是父ID的ID。我要获取的是名称而不是列“ parent_of”上的ID。 基本上我想得到这个:
id;name;parent_of
1;John;Peter
2;Rachel;Peter
3;Peter;
我已经写了一个解决方案,但不是更有效的方法:
import pandas as pd
d = {'id': [1, 2, 3], 'name': ['John', 'Rachel', 'Peter'], 'parent_of': [3,3,'']}
df = pd.DataFrame(data=d)
df_tmp = df[['id', 'name']]
df = pd.merge(df, df_tmp, left_on='parent_of', right_on='id', how='left').drop('parent_of', axis=1).drop('id_y', axis=1)
df=df.rename(columns={"name_x": "name", "name_y": "parent_of"})
print(df)
您有更好的解决方案来实现这一目标吗?
谢谢!
答案 0 :(得分:1)
使用map
df['parent_of']=df.parent_of.map(df.set_index('id')['name'])
df
Out[514]:
id name parent_of
0 1 John Peter
1 2 Rachel Peter
2 3 Peter NaN