Python Pandas 数据框搜索行之间的二级关系

Python Pandas Data Frame search secondary relations between rows

例如,我在Python中有一个DataFrame,用people_name、fav_color、best_friend_name来命名人。我应该如何查询才能添加一个新列,这是他们最好的朋友最喜欢的颜色,即 best_friend_fav_color?

我的数据是这样的:

{'Name' : ['John', 'Leo', 'Mary'],
 'fav_color' : ['Red', 'Blue', 'Green'],
 'Best_friend_name' : ['Leo', 'Mary', 'John']}

预期输出如下:

{'Name' : ['John', 'Leo', 'Mary'],
 'fav_color' : ['Red', 'Blue', 'Green'],
 'Best_friend_name' : ['Leo', 'Mary', 'John'], 
 'Best_friend_fav_color' = ['Blue', 'Green', 'Red']}

我们可以假设最好的朋友永远在数据框中。

这很容易做到:

首先复制你的数据来制作两个DataFrame:

df2 = df[['Name', 'fav_color']].copy()

接下来,加入人名和好友名这两个DataFrames:

res = df.merge(df2, how='left', left_on='Best_friend_name', right_on='Name')

res 将包含您要查找的输出。它的列将需要重命名。您会注意到您将有 fav_color_xfav_color_y。要重命名,只需将正确的名称分配给 res.columns,如下所示:

res.columns = ['Name', 'fav_color', 'Best_friend_name', 'Name2', 'Best_friend_fav_color']

您注意到两个 Name 列了吗?您可以简单地删除 'Name2'.