Удалить строки из кадра данных, текст которых не содержит элементов из списка - PullRequest
0 голосов
/ 11 марта 2020

Я импортирую данные из таблицы с несовместимыми соглашениями об именах. Я создал список названий производителей, которые я хотел бы использовать в качестве основы для сравнения с импортированным именем. В идеале я удаляю все строки из кадра данных, которые не совпадают со списком производителей. Я пытаюсь создать индексный вектор, используя для l oop, чтобы перебрать каждый элемент столбца dataframe и сравнить со списком. Если текст есть, обновите мой индексный вектор до true. Если нет, индексный вектор обновляется до false. Наконец, я хочу использовать индексный вектор для удаления строк из исходного фрейма данных.

Я пробовал генераторы и комплекты, но безрезультатно. Я думал, что для l oop будет менее изящно, но в конечном итоге работать, но я все еще застрял. Мой код указан ниже.

  • meltdat .Products - это мой столбец данных, содержащий импортированные данные.
  • mfgs - мой список имен производителей.
  • prodex - мой индексный вектор.
 meltdat = pd.DataFrame(
    {"Location":["S1","S1","S1","S1","S1"],
     "Date":["1/1/2020", "1/1/2020", "1/1/2020", "1/1/2020", "1/1/2020"],
     "Products":['CC304RED','COHoney','EtainXL','Med467','MarysTop'],
     "Sold":[1,3,0,1,2]})

        mfgs = ['CC', 'Etain', 'Marys']

        for prods in meltdat.Products:
             if any(mfg in meltdat.Products[prods] for mfg in mfgs):
                  prodex[prods] = TRUE
             else:
                  prodex[prods] = FALSE

Я добавил пример данных в фрейм данных, который отражает мои импортированные данные.

1 Ответ

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

вы можете использовать pd.DataFrame.apply:

meltdat[meltdat.Products.apply(lambda x: any(m in x for m in mfgs))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...