Создайте новый фрейм данных со строками, которые не были включены в другой фрейм данных - PullRequest
1 голос
/ 11 марта 2020

Мне нужно создать новый фрейм данных со строками, которые не были включены в фрейм данных '' results '', но находятся в фрейме данных '' df '' без создания нового фильтра.

У меня нет Идея как это сделать. Можете ли вы мне помочь? (извините, если нуб вопрос)

import pandas as pd

#Creating dataframe
d = {'col1': [1, 2,3,4,5,6,7,8,9,10], 'col2': ['a','b','b','b','c','d','c','a','z','c']}
df = pd.DataFrame(data=d)

#Finding the lines that contain a certain letter
a = df[df['col2'].str.contains("a")]
b = df[df['col2'].str.contains("b")]
c = df[df['col2'].str.contains("c")]

#Merge the 3 data frames
frames = [a, b, c]
results = pd.concat(frames)
print(results)

Ответы [ 3 ]

0 голосов
/ 11 марта 2020

Сначала выполните оба df и результаты

new_df = pd.concat([df, results])

, затем удалите все дубликаты с параметром keep=False, чтобы удалить все общие записи из обоих данных, и вы получит необходимый вам фрейм данных

new_df = new_df.drop_duplicates(keep=False)
0 голосов
/ 11 марта 2020

Использование df.index.difference - возвращает индекс, отсутствующий в другом кадре данных.

>>> df.iloc[df.index.difference(results.index)]
   col1 col2
5     6    d
8     9    z

или

>>> df[~df.isin(results).all(1)]
   col1 col2
5     6    d
8     9    z
0 голосов
/ 11 марта 2020

Лучшим решением было бы создать маску по всем 3 маскам в одной с | для ИЛИ, а затем для не совпадающих строк инвертировать маску на ~:

m = df['col2'].str.contains("a|b|c")
results = df[m]
print(results)
   col1 col2
0     1    a
1     2    b
2     3    b
3     4    b
4     5    c
6     7    c
7     8    a
9    10    c

df1 = df[~m]
print (df1)
   col1 col2
5     6    d
8     9    z

Ваше решение должно быть изменено фильтром несоответствующие значения индекса:

df1 = df[~df.index.isin(results.index)]
print (df1)
   col1 col2
5     6    d
8     9    z
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...