比较两个数据帧并根据匹配的列值从df中删除行

时间:2018-04-19 05:33:18

标签: python-3.x pandas dataframe

我有两只大熊猫df,看起来像这样:

df1:

pid Name score age
100  Ram     3  36
101 Tony     2  40
101 Jack     4  56
200 Jill     6  30

df2
pid Name score age
100  Ram     3  36
101 Tony     2  40
101 John     4  51
101 Jack     9  32
200 Jill     6  30

两个df都用'pid'索引。我想比较一下df1& df2基于列'得分'。即,我只需要保留df2中与df1匹配的索引和得分值。

我的预期结果应为

new df2:
pid Name index age
100  Ram     3  36
101 Tony     2  40
101 John     4  51
200 Jill     6  30 

对此方面的任何帮助表示高度赞赏。

1 个答案:

答案 0 :(得分:1)

pidscore列使用merge,但首先按照reset_index从索引创建列,再次创建最后一个创建pid索引的列以及相同的列新的DataFramedf2.columns添加reindex

df = (pd.merge(df1.reset_index(), 
               df2.reset_index(), on=['score', 'pid'], how='left', suffixes=['_',''])
        .set_index('pid')
        .reindex(columns=df2.columns))

print (df)
     Name  score  age
pid                  
100   Ram      3   36
101  Tony      2   40
101  John      4   51
200  Jill      6   30

输入:

print (df1)
     Name  score  age
pid                  
100   Ram      3   36
101  Tony      2   40
101  Jack      4   56
200  Jill      6   30

print (df2)
     Name  score  age
pid                  
100   Ram      3   36
101  Tony      2   40
101  John      4   51
101  Jack      9   32
200  Jill      6   30