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可能没有用。