Python: фильтрация CSV с условиями из другого CSV - PullRequest
1 голос
/ 03 мая 2020

Я пытаюсь написать Python код, используя Pandas для фильтрации CSV-файла, в зависимости от условий, установленных из другого CSV-файла.

CSV, который я хочу отфильтровать, выглядит примерно так :

date              product
01/05/2020        Test Product 1
02/05/2020        Test Product 1
03/05/2020        Test Product 1
04/05/2020        Test Product 1
05/05/2020        Test Product 1
06/05/2020        Test Product 1
07/05/2020        Test Product 1
01/05/2020        Test Product 2
02/05/2020        Test Product 2
03/05/2020        Test Product 2
04/05/2020        Test Product 2
05/05/2020        Test Product 2
06/05/2020        Test Product 2
07/05/2020        Test Product 2

И CSV с условием что-то вроде этого:

product               start_date
Test Product 1        01/05/2020
Test Product 2        04/05/2020

Я хочу отфильтровать первый CSV так, чтобы любой тестовый продукт, который имеет start_date после 01/05, соответствующие строки будут удалены. Например, тестовый продукт 2 имеет начальную дату 04/05/2020, что означает, что в первом CSV я пытаюсь удалить строки для 01/05, 02/05 и 03/05 для этого продукта.

Это будет желаемый результат:

    date              product
01/05/2020        Test Product 1
02/05/2020        Test Product 1
03/05/2020        Test Product 1
04/05/2020        Test Product 1
05/05/2020        Test Product 1
06/05/2020        Test Product 1
07/05/2020        Test Product 1
04/05/2020        Test Product 2
05/05/2020        Test Product 2
06/05/2020        Test Product 2
07/05/2020        Test Product 2

Какой лучший способ сделать это? Я пытался сделать это многими способами, используя фреймы данных, но не нашел ни одного правильного сценария ...

Заранее большое спасибо!

1 Ответ

1 голос
/ 03 мая 2020

Мы можем использовать boolean indexing с Series.map

df_filtered = df1.loc[df1['date'].ge(df1['product']\
                                     .map(df2.set_index('product')['start_date']))]
print(df_filtered)
          date         product
0   01/05/2020  Test Product 1
1   02/05/2020  Test Product 1
2   03/05/2020  Test Product 1
3   04/05/2020  Test Product 1
4   05/05/2020  Test Product 1
5   06/05/2020  Test Product 1
6   07/05/2020  Test Product 1
10  04/05/2020  Test Product 2
11  05/05/2020  Test Product 2
12  06/05/2020  Test Product 2
13  07/05/2020  Test Product 2

Чтобы прочитать ваш CSV-файл, мы используем pd.read_csv

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