Python 因此,选择具有条件的行取决于列日期值

Python 因此,选择具有条件的行取决于列日期值,python,pandas,Python,Pandas,我从我的数据帧开始: ID Alarm Date 1 1 2017-09-06 13:41:36.0 1 2 2017-09-06 15:50:20.0 2 3 2016-12-12 13:30:30.0 2 1 2017-09-03 18:24:12.0 2 2 2017-09-06 12:01:51.0 3 4 2017-08-10 13:11:11.0 3 2 2017-09-06 14:43:33.0

我从我的数据帧开始:

ID Alarm          Date
1   1    2017-09-06 13:41:36.0
1   2    2017-09-06 15:50:20.0
2   3    2016-12-12 13:30:30.0
2   1    2017-09-03 18:24:12.0
2   2    2017-09-06 12:01:51.0
3   4    2017-08-10 13:11:11.0
3   2    2017-09-06 14:43:33.0
因此,对于每个ID,它按日期升序排序。现在我只想选择行,这些行的日期最长比每个ID中最后一条记录的日期早一周(它总是带有Alarm=2)。应分别为每个ID执行此操作。输出应如下所示:

ID Alarm          Date
1   1    2017-09-06 13:41:36.0
1   2    2017-09-06 15:50:20.0
2   1    2017-09-03 18:24:12.0
2   2    2017-09-06 12:01:51.0
3   2    2017-09-06 14:43:33.0
我试着按ID分组,但我不知道如何连接报警和日期。最简单的方法是什么,可能是使用外部“时间”库

您可以通过比较上一天减去的时间差来使用过滤:

print (df.groupby('ID')['Date'].apply(lambda x: x >= x.iat[-1] - pd.Timedelta(7, unit='d')))
0     True
1     True
2    False
3     True
4     True
5    False
6     True
Name: Date, dtype: bool

df = df[df.groupby('ID')['Date'].apply(lambda x: x >= x.iat[-1] - pd.Timedelta(7, unit='d'))]
print (df)
   ID  Alarm                Date
0   1      1 2017-09-06 13:41:36
1   1      2 2017-09-06 15:50:20
3   2      1 2017-09-03 18:24:12
4   2      2 2017-09-06 12:01:51
6   3      2 2017-09-06 14:43:33

关于如何过滤数据,还不太清楚。是否要输出每个唯一ID的最后一周?你能不能再详细介绍一下数据帧(
df.info()
)上周是的,但是从每个ID的报警=2的日期开始。这只是我的本地示例,所以给出df.info可能没有用。