группировка между датами в отметке времени и фильтрацией с проверкой другого столбца - PullRequest
0 голосов
/ 12 марта 2019

У меня есть база данных продуктов, для которых у меня есть свои входы и выходы.И я хочу сделать скользящее окно на 30 минут, чтобы увидеть, попадал ли продукт в эти 30 минут.Я думал об использовании groupby, а затем отфильтровал эти группы, чтобы получить только те из них, которые имеют in (1) и out (0).

Но, может быть, есть лучший способ сделать это, о котором я не думал.

Пример:

    code      timestamp                   in_out
0   104       2018-12-18 16:15:00         1
1   105       2018-12-18 16:15:00         1
2   105       2018-12-18 16:35:00         0
3   107       2018-12-19 16:15:00         1
4   104       2019-01-13 10:00:00         0
5   502       2018-12-18 16:15:00         0

Редактировать:

Код, о котором я говорил в группе:

time1 = df.iloc[0]['timestamp']
time1end = time1 + timedelta(minutes=30)
grp1 = df[(df['timestamp'] >= time1) & (df['timestamp'] <= time1end)]
grp1.groupby(by='subject_code').filter(lambda x: len(x) > 1)

1 Ответ

1 голос
/ 12 марта 2019

Я предлагаю вам сделать это так:

убедитесь, что отметка времени соответствует формату даты и времени

df['timestamp'] = pd.to_datetime(df['timestamp'], infer_datetime_format=True)

Затем возьмите коды, которые происходили и выходили (если вы уверены, чтокаждый код повторяется ровно два раза, вы можете пропустить этот шаг)

df2 = df.groupby('code').filter(lambda x: x['in_out'].mean()==0.5)

Я отфильтровал со средним значением == 0,5, что означает один раз за раз, вы можете заменить его на что-то умнее Теперь давайте решим проблему

df3 = df2.groupby('code')['timestamp'].diff().dropna()

Что делает этот кусок кода, для каждого кода он вычисляет разницу во времени, тогда вы можете взять те, которые меньше 30 минут.

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