Панды - объединить / объединить / vlookup df и удалить все строки, которые соответствуют - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь сослаться на список просроченных заказов из одной электронной таблицы (df name = data2) и просмотреть их в новой таблице заказов (df name = data), чтобы удалить все строки, содержащие просроченные заказы.Затем верните новую электронную таблицу (df name = results).

У меня возникают проблемы при попытке воспроизвести то, что я делаю в Excel vloookup / sort / delete в пандах.Пожалуйста, просмотрите код / ​​шаги psuedo как код:

  1. Импортируйте simple.xls в качестве фрейма данных с именем «data»
  2. Импортируйте wo.xlsm, имя листа «T» в качестве фрейма данных с именем «data2»
  3. Выполните vlookup, используя столбец «А» в «данных», который будет использоваться в качестве значений, которые будут сопоставляться с любым из тех же значений в столбце «А» «данных2» (тамоба просто идентификаторы заказа)

  4. Для всех значений, которые существуют внутри столбца A в «data2», а также существуют в столбце «A» «data», сгруппируйте (при необходимости) и удалитевся строка (есть 26 столбцов) для каждого соответствующего идентификатора заказа, найденного в столбце A обоих наборов данных.Повторим, удалив всю строку для совпадений, найденных в файле «данных».Сохраните меньший набор данных как результаты.


    import pandas as pd
    data = pd.read_excel("ors_simple.xlsx", encoding = "ISO-8859-1", 
    dtype=object)
    data2 = pd.read_excel("wos.xlsm", sheet_name = "T")
    results = data.merge(data2,on='Work_Order')
    writer = pd.ExcelWriter('vlookuped.xlsx', engine='xlsxwriter')
    results.to_excel(writer, sheet_name='Sheet1')
    writer.save()

1 Ответ

0 голосов
/ 14 сентября 2018

Я перечитал ваш вопрос и думаю, что правильно его понял.Вы хотите узнать, истек ли срок действия какого-либо заказа в new_orders (вы называете его data), используя expired_orders (вы называете его data2).

Если вы перефразируете свой вопрос, что вы хотитесделать это: 1) выяснить, находится ли значение в столбце в DataFrame в столбце в другом DataFrame, а затем 2) удалить строки, где значение существует в обоих .


Использование pd.merge является одним из способов сделать это.Но поскольку вы хотите использовать expired_orders для фильтрации new_orders, pd.merge кажется немного излишним.

У Pandas на самом деле есть метод для такого рода вещей, и он называется isin(), поэтому давайте использовать это!Этот метод позволяет вам проверить, существует ли значение в одном column в другом column.

df_1['column_name'].isin(df_2['column_name'])

isin() возвращает Series значений True / False, которые вы можете применить для фильтрации вашихDataFrame, используя его в качестве маски: df[bool_mask].

Так как вы используете это в вашей ситуации?

is_expired = new_orders['order_column'].isin(expired_orders['order_column'])
results = new_orders[~is_expired].copy() # Use copy to avoid SettingWithCopyError.

~ равно не так - значит ~is_expired означаетчто срок действия заказа не истек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...