假设我们有Expert
和df
:
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
。希望这足够清楚。否则很乐于阐述!
答案 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