在同一数据框的列之间合并

时间:2020-09-08 14:10:25

标签: python pandas

我有以下数据框:

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)

您有更好的解决方案来实现这一目标吗?

谢谢!

1 个答案:

答案 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