Выбор строк, которые соответствуют условию группы - PullRequest
1 голос
/ 04 июня 2019

У меня есть Pandas DataFrame df, который выглядит следующим образом:

ID    Timestamp    x    y
1     10           322  222
1     12           234  542           
1     14           22   523
2     55           222  76
2     56           23   87
2     58           322  5436
3     100          322  345
3     150          22   243
3     160          12   765
3     170          78   65

Теперь я хотел бы сохранить все строки, где отметка времени находится между 12 и 155. Это можно сделать с помощью df[df["timestamp"] >= 12 & df["timestamp"] <= 155]. Но я хотел бы, чтобы были включены только строки, где все отметки времени в соответствующей группе идентификаторов находятся в пределах диапазона. Таким образом, в приведенном выше примере это должно привести к следующему кадру данных:

ID    Timestamp    x    y
2     55           222  76
2     56           23   87
2     58           322  5436

Для ID == 1 и ID == 3 не все временные метки строк находятся в диапазоне, поэтому они не включены.

Как это можно сделать?

Ответы [ 2 ]

3 голосов
/ 04 июня 2019

Вы можете объединить groupby («ID») и фильтр:

df.groupby("ID").filter(lambda x: x.Timestamp.between(12, 155).all())

   ID  Timestamp    x     y
3   2         55  222    76
4   2         56   23    87
5   2         58  322  5436
2 голосов
/ 04 июня 2019

Используйте transform с groupby и используя all(), чтобы проверить, все ли элементы в группе соответствуют условию:

df[df.groupby('ID').Timestamp.transform(lambda x: x.between(12,155).all())]

   ID  Timestamp    x     y
3   2         55  222    76
4   2         56   23    87
5   2         58  322  5436
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...