Фильтрация данных на основе двух столбцов из другого кадра данных - PullRequest
0 голосов
/ 29 октября 2018

У меня есть два следующих кадра данных:

df = pd.DataFrame({
    'id': ['1', '1', '2', '3', '3', '8','4', '1', '2', '4'],
    'start': ['2017-01-01', '2017-02-01', '2017-03-01', '2017-02-01', '2017-03-01', '2017-04-01', '2017-01-01', '2017-04-01', '2017-05-01', '2017-02-01'],
    'end': ['2017-01-02', '2017-02-4', '2017-03-02', '2017-02-06', '2017-03-01', '2017-04-03', '2017-01-06', '2017-04-08', '2017-05-04', '2017-02-01']    
})

df1 = pd.DataFrame({
    'date': ['2017-01-02', '2017-02-01', '2017-03-01', '2017-02-01', '2017-03-01', '2017-04-01'],
    'id': ['1', '2', '3','4', '5', '6']       
})

Я хотел извлечь из df только те строки, в которых id в df совпадает с id в df1 и date в df1 для этого конкретного id также совпадает или находится между start и end в df.
Я могу легко извлечь id из df, сравнив, присутствует ли тот же id во втором кадре данных df1, используя:

df_filtered = df[(df['id'].isin(df1['id']))]

но мне не удалось сравнить date из df1 с start и end из df. То, что я хотел как вывод, является следующим:

  id      start        end
0  1 2017-01-01 2017-01-02
4  3 2017-03-01 2017-03-01
9  4 2017-02-01 2017-02-01

столбцы даты, начала и конца уже в формате даты-времени Y-M-D. Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Слияние и фильтрация:

df2 = df.merge(df1)
df2[(df2['date']>=df2['start'])&(df2['date']<=df2['end'])]
0 голосов
/ 29 октября 2018

Вы, вероятно, хотите объединить

df.merge(df1, on='id', how='inner')

        end id       start        date
 0  2017-01-02  1  2017-01-01  2017-01-02
 1   2017-02-4  1  2017-02-01  2017-01-02
 2  2017-04-08  1  2017-04-01  2017-01-02
 3  2017-03-02  2  2017-03-01  2017-02-01
 4  2017-05-04  2  2017-05-01  2017-02-01
 5  2017-02-06  3  2017-02-01  2017-03-01
 6  2017-03-01  3  2017-03-01  2017-03-01
 7  2017-01-06  4  2017-01-01  2017-02-01
 8  2017-02-01  4  2017-02-01  2017-02-01

А затем сравните столбцы

...