проверьте, попадает ли список времен в диапазон времени pandas фрейм данных - PullRequest
1 голос
/ 05 мая 2020

У меня есть два фрейма данных

df1

        name    start               end
30745   c   25/02/2020 09:23:53 25/02/2020 09:24:00
30746   c   25/02/2020 09:24:04 25/02/2020 09:24:11
30747   c   25/02/2020 09:24:19 25/02/2020 09:24:26
30748   a   25/02/2020 09:24:37 25/02/2020 09:24:40
30749   b   25/02/2020 09:24:38 25/02/2020 09:24:45
30750   c   25/02/2020 09:24:50 25/02/2020 09:24:58

df2

   start                 name
2020-02-25 09:24:38     a
2020-02-25 09:24:38     a
2020-02-25 09:24:38     b
2020-02-25 09:24:41     b
2020-02-25 09:24:41     e
2020-02-25 09:24:41     b

Я хочу проверить, попадает ли время из df2 в диапазон в df1 и если оно проверяет, совпадает ли имя.
Если имя совпадает, создайте другой столбец в df2, присвоив ему метку «да». А если имя не совпадает, пометки его нет.

В идеале df2 должен выглядеть так:

   start                 name    label
2020-02-25 09:24:38     a        yes
2020-02-25 09:24:38     a        yes
2020-02-25 09:24:38     b        no
2020-02-25 09:24:41     b        yes
2020-02-25 09:24:41     e        no
2020-02-25 09:24:41     b        yes

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 05 мая 2020

Предполагая, что ваши фреймы данных содержат равные индексы, я бы сначала проверил, совпадают ли имена, а затем проверю, удовлетворены ли даты:

# check if names match
df2['name_match'] = (df1['name'] == df2['name'])

# check if dates match
df2['dt_match'] = (df1['start'] <= df2['start']) & (df1['end'] <= df2['start'])

# finally, map to a label (using boolean logic)
df2['label'] = (df2['name_match'] * df2['dt_match']).map({True:"yes", False:"no"})

# You can then remove the columns you created
df2.drop(columns=['name_match', 'dt_match'], inplace=True)

Если ваш df массивный, вы можете ускорить все это, применив логическое значение logi c к сравнению даты и времени, проверяя только строки, которые удовлетворяют name_match.

Примечание: Похоже, что ваши индексы не совпадают, и в этом случае вам нужно будет объединить фреймы данных или сопоставьте их с помощью некоторой эвристики c или алгоритма приоритизации.

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