python中的Pandas数据帧:根据df2中的行从df1中删除行

时间:2018-03-02 21:46:33

标签: python python-3.x pandas dataframe merge

我有两个数据帧:

df1: contains all information
rowname a  b  c  d
R1      1  2  0  1
R2      2  2  0  1
R3      0  2  0  0
R4      1  2  0  1

df2: contains a subset of the rows and columns:
rowname a  b  c  
R1      1  2  0  
R2      2  2  0   
R4      1  2  0 

我想过滤掉df2以外的所有行df1。所以对于这种情况,我希望在保留所有列的同时摆脱df1中的R3。

我认为使用df1.merge(df2, ...)可以帮助实现这一目标,但是我尝试过各种各样的争论并没有成功。我使用的是python3。

2 个答案:

答案 0 :(得分:1)

Simpy使用isin()

过滤数据框
df1[df1.rowname.isin(df2.rowname)]

  rowname  a  b  c  d
0      R1  1  2  0  1
1      R2  2  2  0  1
3      R4  1  2  0  1

答案 1 :(得分:0)

这是一种方式,仅匹配列[ { "$group": { "_id": 0, "origin": { "$addToSet": { "$cond": [ { "$in": ["$ownerId", userIds] }, "$$ROOT", null ] } } } }, { "$project": { "origin": { "$filter": { "input": "$origin", "as": "el", "cond": { "$ne": ["$$el", null] } } } } } ]

['a', 'b', 'c']

结果:

df = pd.concat([df1, df2])

df = df.loc[df.duplicated(['a', 'b', 'c'], keep=False)]\
       .dropna(subset=['d'], axis=0)

df['d'] = df['d'].astype(int)