python - 计算 ID 在随后的 180 天内出现的次数
问题描述
我有一个包含以下列的熊猫数据框:
REF_ID REPORT_DATE_RAW
12345 2019-02-21 20:53:00
我想查看每个细节REF_ID
,以及它是否在之后的 180 天内被多次报告REPORT_DATE_RAW
。如果在随后的 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
转发功能,但它似乎不适用于日期时间窗口。
推荐阅读
- dart - MainApp 根据值发送到页面
- java - 跨步在 Eclipse Photon 中无法按预期工作
- java - 无法使用来自 Maven 部署依赖项的类
- python - 使用 Python/Selenium 从 Angular 网站中选择复选框
- javascript - 将鼠标悬停在隐藏的工具提示上后 D3.js 工具提示重新出现?
- google-apps-script - 如何处理多个 onEdit() 函数?
- r - 在组类别末尾的新列中添加具有组总和的行
- java - 如何否定多个谓词
- arrays - 如何获取数组的基本范围?
- pug - 如何让 Jade(pug) 包含的文件访问变量?