首页 > 解决方案 > 选择符合组条件的行

问题描述

我有一个 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时间戳都在范围内,这就是它们不包括在内的原因。

如何才能做到这一点?

标签: pythonpandaspandas-groupby

解决方案


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

推荐阅读