繁体   English   中英

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

[英]Counting how many times an ID appears within subsequent 180 days

我有一个 pandas dataframe 包括这些列:

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

我想查看每个特定REF_ID以及它是否在REPORT_DATE_RAW之后的 180 天内被多次报告。 如果在随后的 180 天内未出现,则视为误报 如果是,我想返回 1,如果不是,我想返回 0。

我需要为每个 REF_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 被视为误报。

提前致谢。 这个项目对时间非常敏感,所以我很感激帮助

利用:

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

其中[::-1]符号是向前rolling的方法。


注意:Pandas 作为pd.api.indexers.FixedForwardWindowIndexer用于转发功能,但它似乎不适用于日期时间 windows。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM