@HelloDarknessMyOldFried

Как удалить строки из таблицы, которые повторяются в другой таблице?

Добрый день!
Суть проблемы: есть большая таблица и маленькая таблица. Маленькая таблица содержит отдельные строки из большой.
"Большая":
col1 col2 col3
0 A 1 5
1 B 2 6
2 C 3 7
3 D 4 8
4 C 3 102

"Маленькая":
col1 col2 col3
0 C 3 7

Как удалить из большой таблицы строки, которые повторяются у обоих? (в данном случае это строка "С 3 7").
Должно получиться вот так:

col1 col2 col3
0 A 1 5
1 B 2 6
2 D 4 8
3 C 3 102

Желательно сделать это без циклов, так как реальные таблицы содержат сотни тысяч строк и много повторяющихся значений.

Спасибо большое!
  • Вопрос задан
  • 1066 просмотров
Решения вопроса 1
@zexer
import pandas as pd

df1 = pd.DataFrame({'col1':['A', 'B', 'C', 'D', 'C'], 'col2': [1,2,3,4,3], 'col3': [5,6,7,8,102]})
df1

df2 = pd.DataFrame({'col1':['C'], 'col2': [3], 'col3': [7]})
df2


df_new = pd.merge(df1, df2, how='outer', indicator=True)
df_new.loc[df_new['_merge'] == 'left_only'].drop('_merge', axis=1)


P.S.
Учитесь гуглить на английском (в гугле)
Я не супер знаток пандаса, но даже чрезвычайно дурацкий и очевидный вопрос в гугл в виде "how to delete rows from table from other table pandas" выдает в результате на первой строчке ссылку, откуда и взято это решение
https://stackoverflow.com/questions/39880627/in-pa...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@PavelMos
преобразовать датафреймы в списки, точнее в формат двухмерного массива, т.е. список списков, и сделать лист компрехеншн с условием, потом преобразовать обратно с теми же названиями столбцов что были.

new_list=[x for x in df1.values.tolist() if x not in df2.values.tolist()]
df3=pandas.Dataframe.from_records(data=new_list, columns=df1.columns.values())
df3
Out[217]: 
  col1  col2  col3
0    A     1     5
1    B     2     6
2    D     4     8
3    C     3   102


Или как выше написали через объединение в самих датафреймах. Смотря что быстрее будет работать
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы