【问题标题】:Pandas: how to merge to dataframes on multiple columns?Pandas:如何合并到多列上的数据框?
【发布时间】:2019-04-18 11:42:43
【问题描述】:

我有 2 个数据框,df1df2

df1 包含一些人与人之间的交互信息。

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

我希望df2 只用于df1 中的人(Laura 消失),而对于那些不在df2 中的人,请保留NaN(即 Eva),例如:

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

【问题讨论】:

  • 请将您的 dfs 分享为df.to_dict()

标签: python pandas dataframe


【解决方案1】:

您可以在 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

【讨论】:

    【解决方案2】:

    df1map 的唯一值上创建一个 DataFrame df2 为:

    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
    

    注意:订单不会被保留。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-08
      • 2017-10-05
      • 2019-12-09
      • 2020-11-02
      • 2018-11-29
      相关资源
      最近更新 更多