Pandas:如何在多列上合并两个数据框?

3
我有两个数据框,df1df2df1 包含人们之间的一些交互信息。
df1
     Name1   Name2 
0    Jack    John   
1    Sarah   Jack   
2    Sarah   Eva    
3    Eva     Tom    
4    Eva     John   

df2 包含一般人和 df1 中的一些人的状态信息。

df2
     Name     Y 
0    Jack     0   
1    John     1   
2    Sarah    0       
3    Tom      1 
4    Laura    0

我希望对于那些与df1中的人员相对应的df2(即,劳拉不见了),只保留该部分数据,并将那些在df2中不存在的人员替换为NaN(例如,伊娃)。
df2
     Name     Y 
0    Jack     0   
1    John     1   
2    Sarah    0       
3    Tom      1 
4    Eva     NaN

请将您的dfs转换为df.to_dict()并分享。 - rpanai
2个回答

2
df1 的唯一值上创建一个 DataFrame,并将其与 df2 进行 map
df = pd.DataFrame(np.unique(df1.values),columns=['Name'])
df['Y'] = df.Name.map(df2.set_index('Name')['Y'])

print(df)
    Name    Y
0    Eva  NaN
1   Jack  0.0
2   John  1.0
3  Sarah  0.0
4    Tom  1.0

注意:顺序不保留。

0

您可以在 df1 中创建一个唯一名称列表并使用 isin。

names = np.unique(df1[['Name1', 'Name2']].values.ravel())
df2.loc[~df2['Name'].isin(names), 'Y'] = np.nan

    Name    Y
0   Jack    0.0
1   John    1.0
2   Sarah   0.0
3   Tom     1.0
4   Laura   NaN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接