如何修改数据以在另一个时间范围内删除ID

2024-10-02 04:22:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,看起来像:

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时,第一个和最后一个id之间的时间差至少为一年

我试过了

df[df.groupby('ID')['takingtime'].transform(lambda x: x.nunique() > 1)]

但我不确定这样做是否正确,如果是,那么> 5的含义是什么?天,月,年


Tags: 数据lambdaiddftransformgroupby含义时间差
1条回答
网友
1楼 · 发布于 2024-10-02 04:22:18

使用:

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)

相关问题 更多 >

    热门问题