Pandas отбросить подмножество данных - PullRequest
0 голосов
/ 18 апреля 2020

Предположим, у нас есть 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 минус df_drop. Надеется, что это достаточно ясно. В противном случае рады разработать!

Ответы [ 3 ]

2 голосов
/ 18 апреля 2020

Вы можете 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 голос
/ 18 апреля 2020

Как это может быть:

In [1468]: pd.concat([df, df_drop]).drop_duplicates(keep=False)                                                                                                                                             
Out[1468]: 
   A  B
1  2  1
2  3  1
0 голосов
/ 18 апреля 2020

В этом случае 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, :]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...