计算一个ID在随后180天内出现的次数

2024-04-19 00:17:26 发布

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

我有一个包含以下列的数据框:

REF_ID       REPORT_DATE_RAW
12345      2019-02-21 20:53:00  

我想看看每个特定的REF_ID,以及它是否在REPORT_DATE_RAW之后的180天内被报告过不止一次如果在随后的180天内没有出现,则视为假阳性。如果是,我想返回1,如果否,则返回0

我将需要对每个参考ID执行此操作。我尝试使用groupby和滚动求和来执行此操作,并参考了此处的另一个类似问题。以下是我目前的情况:

df['REPORT_DATE_RAW'] = pd.to_datetime(df['REPORT_DATE_RAW'])

delta=180
df = df.set_index('REPORT_DATE_RAW').assign(count=1).groupby('REF_ID').rolling(f'{delta}D').sum() - 1

这将返回:

REF_ID   REPORT_DATE_RAW      count
8637    2019-10-25 16:39:00    0.0
8637    2019-10-31 10:38:00    1.0

我不确定我能不能用这些结果做一个分析。。。。我不知道为什么第一个事件的计数为0,而另一个事件的计数为1。这两个REF_ID在180天内,所以我只想将这个REF_ID计算为1,这样我就可以计算出有多少REF_ID被认为是误报的

提前谢谢。这个项目是非常时间敏感,所以我感谢你的帮助


Tags: 数据reportrefiddfdateraw报告
1条回答
网友
1楼 · 发布于 2024-04-19 00:17:26

使用:

(df.set_index('REPORT_DATE_RAW').groupby('REF_ID')
 .apply(lambda x: (x[::-1].rolling('180d').count() > 1)[::-1].astype(int))
)

其中[::-1]表示法采用向前rolling方法


注意:Pandas作为^{}用于forward函数,但它似乎不适用于datetime窗口

相关问题 更多 >