选择与组条件匹配的行

时间:2019-06-04 11:11:05

标签: python pandas pandas-groupby

我有一个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组中所有时间戳均在范围内的行。因此,在上面的示例中,它应导致以下数据帧:

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

对于ID == 1ID == 3,并非所有行的时间戳都在该范围内,这就是为什么不包括它们的原因。

这怎么办?

2 个答案:

答案 0 :(得分:3)

您可以结合使用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

答案 1 :(得分:2)

transformgroupby一起使用,并使用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