Удалите строки одного df pandas, используя другой df, но включите поведение «подстановочного знака», когда во втором df Python

Программы на Python
Ответить
Anonymous
 Удалите строки одного df pandas, используя другой df, но включите поведение «подстановочного знака», когда во втором df

Сообщение Anonymous »

У меня есть файл df из сотен тысяч строк, который может содержать ошибки. Команда вручную проверяет/определяет, а я пытаюсь включить гибкое удаление комбинаций для очистки.
Существует три ключевых значения, и я надеялся включить любое< /em> этих значений, которые необходимо заполнить, в зависимости от области удаления. Я хочу удалить строки, соответствующие самому широкому определению, рассматривая пустые столбцы в каждой строке как подстановочные знаки.
Вот воспроизведение одного подхода, но мне интересно, есть ли более векторизованный вариант /элегантный метод, который кто-нибудь подскажет?

Код: Выделить всё

import pandas as pd

target_df = pd.DataFrame({'id_1': ['1', '1', '1', '1', '2', '4', '4'],
'id_2': ['2', '2', '3', '3', '3', '5', '5'],
'attr': ['A', 'B', 'A', 'B', 'C', 'C', 'D']})
remove_df = pd.DataFrame({'id_1': ['1', '1', '4'],
'id_2': ['2', '3', None],
'attr': ['A', None, None]})

result_df = target_df.copy()
for _, row in remove_df.iterrows():
row = row.loc[row.notna()]
row = row.to_frame().T.reset_index(drop=True)
filter_cols = row.columns
mask = result_df[filter_cols].eq(row.values).all(axis=1)
result_df = result_df[~mask]

result_df
Некоторые другие мысли:
  • Одна мысль — «разбить» их на части, применив маску к каждому уникальному комбинация значений, отличных от NA, в remove_df? Это также кажется утомительным, так как существует 7 перестановок возможных столбцов NA/Non-NA.
  • выяснение того, какие строки удалить, на основе on merge() интригует. Я думаю, что для этого потребуется сканирование target_df, чтобы расширить Remove_df всеми возможными значениями, когда его значение равно None. Либо мы вернемся к множеству ветвей логики и объединим их, используя on=[cols], один раз для каждой комбинации столбцов, не относящихся к NA.
  • Я мог бы заранее построить кортежи из комбинаций столбцов, не относящихся к NA, а затем перебрать их? Тогда я делаю это максимум 7 раз вместо одного в каждой строке.
Вероятно, < em>что многие из этих удалений (предполагаю, сотни), поэтому, если вышеизложенное достаточно питонично, я оставлю это.
В основном я спрашиваю, как и я Не вижу именно этого вопроса, и это интересное упражнение. У меня средний уровень владения Python, поэтому мне бы хотелось посмотреть, как другие подойдут к этому.

Связано:
  • этот вопрос близок: как объединить, игнорируя NaN: Pandas объединяет несколько столбцов, игнорируя NaN
  • аналогичная идея, слияние n раз, а затем объединить результаты: как объединить два кадров данных, исключая столбец значений NaN?
  • отдайте должное подходу с маской, описанному выше: pandas сравнивается с несколькими столбцами, не включая индекс
    < li>очень похоже на мою первоначальную мысль, но мне не понравилось заполнять все перестановки: Как объединиться с подстановочным знаком? - Панды


Подробнее здесь: https://stackoverflow.com/questions/792 ... ehavior-wh
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»