[英]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.