gpt4 book ai didi

python - 如何在 Python 中创建日期时间使用跟踪器?

转载 作者:行者123 更新时间:2023-12-01 00:36:22 25 4
gpt4 key购买 nike

我正在尝试创建一个使用情况跟踪器,标记在上次标记 ID 后 14 天内具有相同 ID 的项目。因此,如果相同的 ID 出现在第一个 ID 的 14 天内,则无标记,如果它出现在第一个标记的 14 天内,则它成为每个 ID 的第二个标记。

我尝试过使用 .ffill() .groupby .rolling 这些有助于在 14 天内查找重复项,但对滚动标志没有帮助。我认为解决方案可能在于带有扩展窗口的 for 循环的某个时间?

起始代码

df:
date id
1/1/19 38
1/5/19 16
1/10/19 38
1/15/19 38
1/21/19 38
1/30/19 16
2/2/19 38
2/2/19 38
2/3/19 38

我最终需要什么

df2:
date id flag most recent flag
1/1/19 38 True 1/1/19
1/5/19 16 True 1/5/19
1/10/19 38 False 1/1/19
1/15/19 38 True 1/15/19
1/21/19 38 False 1/15/19
1/30/19 16 True 1/30/19
2/2/19 38 True 2/2/19
2/2/19 38 False 2/2/19
2/3/19 38 False 2/2/19

最佳答案

抱歉让您久等了

这里是生成df的代码,如上所示

df = pd.DataFrame({
'date':['1/1/19','1/5/19','1/10/19','1/15/19','1/21/19','1/30/19','2/2/19','2/2/19','2/3/19'],
'id':[38,16,38,38,38,16,38,38,38]
})
df['date'] = pd.to_datetime(df['date'])

而且,这些是我在计算您的标志之前创建的其他列

df['days_ago'] = df.groupby('id')['date'].diff()\
.fillna(pd.Timedelta(seconds=0)).astype('timedelta64[D]').astype(int)
df['days_ago_cumsum'] = df.groupby('id')['days_ago'].cumsum()

而且,这是计算该标志的函数

def get_fixed_day_flag(days_ago_cumsum, within=14):
while True:
cond = days_ago_cumsum >= within
days_ago_cumsum_min = days_ago_cumsum.where(cond).min()
new_days_ago_cumsum = days_ago_cumsum.where(cond) - days_ago_cumsum_min

cond = new_days_ago_cumsum.notna()
days_ago_cumsum[cond] = new_days_ago_cumsum[cond].astype(int)

if days_ago_cumsum.max() < within:
return days_ago_cumsum == 0

完成这两行

df['flag'] = df.groupby('id')['days_ago_cumsum'].transform(get_fixed_day_flag)
df['flag'] = df['flag'] & ~df.duplicated(subset=['date','id'])

关于python - 如何在 Python 中创建日期时间使用跟踪器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57729625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com