我有一个数据框看起来像:
id TakingTime
1 03-01-2015
1 18-07-2015
1 22-10-2015
1 14-01-2016
2 11-02-2015
2 28-02-2015
2 18-04-2015
2 19-05-2015
3 11-02-2015
3 16-11-2015
3 19-02-2016
3 21-04-2016
4 03-01-2015
4 03-01-2015
4 03-01-2015
4 03-01-2015
所需的输出是:
id TakingTime
1 03-01-2015
1 18-07-2015
1 22-10-2015
1 14-01-2016
3 11-02-2015
3 16-11-2015
3 19-02-2016
3 21-04-2016
当我想删除所有ID时,最短与最短拍摄时间之间的时间间隔至少为一年。
我尝试过
df[df.groupby('ID')['takingtime'].transform(lambda x: x.nunique() > 1)]
但是我不确定这是否是正确的方法,是的,这是什么意思> 5
?天,月,年……?
采用:
idx = df.groupby('id').TakingTime.transform(lambda x: x.dt.year.diff().sum().astype(bool))
df[idx]
输出:
id TakingTime
0 1 2015-03-01
1 1 2015-07-18
2 1 2015-10-22
3 1 2016-01-14
8 3 2015-11-02
9 3 2015-11-16
10 3 2016-02-19
11 3 2016-04-21
说明:
对于每个ID,取多年来的差额。如果差异大于0(即 sum().astype(bool)
),则返回True
。我们曾经transform
复制整个组的输出。最后,使用输出索引对数据帧进行切片。
编辑:
要分析特定时间(以天为单位):
days = 865
df.groupby('id').TakingTime.transform(lambda x: (x.max() - x.min()).days >= days)
要么:
from datetime import timedelta
days = timedelta(865)
df.groupby('id').TakingTime.transform(lambda x: (x.max() - x.min()) >= days)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句