熊猫删除数据框的子集

时间:2020-04-18 12:35:36

标签: python pandas dataframe

假设我们有Expertdf

df_drop

我想从df = pd.DataFrame({'A': [1,2,3], 'B': [1,1,1]}) df_drop = df[df.A==df.B] 中删除df_drop,而不使用创建df时使用的显式条件。即我不打算采用解决方案df_drop,但基本上希望以某种方式将df[df.A!=df.B]减去df。希望这足够清楚。否则很乐于阐述!

3 个答案:

答案 0 :(得分:2)

您可以merge将两个数据框都设置为indicator=True,并删除指示符列为both的那些列:

out = pd.merge(df,df_drop, how='outer', indicator=True)
out[out._merge.ne('both')].drop('_merge',1)

   A  B
1  2  1
2  3  1

或者正如乔恩·克莱门茨指出的那样,如果按索引检查就足够了,则可以简单地使用:

df.drop(df_drop.index)

答案 1 :(得分:0)

在这种情况下,drop_duplicates起作用是因为测试标准是两行相等。

通常,您可以使用loc查找符合或不符合指定条件的行。

a = np.random.randint(1, 50, 100)
b = np.random.randint(1, 50, 100)
df = pd.DataFrame({'a': a, 'b': b})
criteria = df.a > 2 * df.b
df.loc[criteria, :]

答案 2 :(得分:0)

也许像这样:

In [1468]: pd.concat([df, df_drop]).drop_duplicates(keep=False)                                                                                                                                             
Out[1468]: 
   A  B
1  2  1
2  3  1