Python 计算一个ID在随后180天内出现的次数
我有一个包含以下列的数据框:Python 计算一个ID在随后180天内出现的次数,python,python-3.x,pandas,datetime,time-series,Python,Python 3.x,Pandas,Datetime,Time Series,我有一个包含以下列的数据框: REF_ID REPORT_DATE_RAW 12345 2019-02-21 20:53:00 我想查看每个特定的REF\u ID,以及它是否在REPORT\u DATE\u RAW之后的180天内被多次报告如果在随后的180天内没有出现,则视为假阳性。如果是,我想返回1,如果否,则返回0 我将需要对每个参考ID执行此操作。我尝试使用groupby和滚动求和来执行此操作,并参考了此处的另一个类似问题。以下是我目前的情况: df['REP
REF_ID REPORT_DATE_RAW
12345 2019-02-21 20:53:00
我想查看每个特定的REF\u ID
,以及它是否在REPORT\u DATE\u 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被认为是误报的
提前谢谢。此项目对时间非常敏感,因此我感谢您的帮助使用:
(df.set\u index('REPORT\u DATE\u RAW')。groupby('REF\u ID'))
.apply(lambda x:(x[::-1]。滚动('180d')。计数()>1)[::-1]。astype(int))
)
其中[::-1]
表示法采用向前滚动的方法
注意:Pandas作为转发函数的一种,但它似乎不适用于datetime窗口。谢谢。这会将每个列的值更改为0或1,但我可以解决这个问题。。。只是出于好奇,你知道一种更快的方法吗?我的数据集有超过40万行,因此.apply()需要很长时间。这只是一个粗略的想法,不需要全部编码如果数据集中有其他列,并且要避免它们成为count
方法的输出,只需在groupby
之后指定一列即可。这应该可以解决你的问题。不过,关于你的第二个问题,我不知道如何绕过应用,因为你想要向前计数,不是吗?只有当你知道你所有的日子都是连续的(也就是说,没有间隔),我才能在工作中思考(在这种情况下,我们可以安全地使用shift
)。但无论如何,请注意,apply
这里是对每个唯一的REF\u ID应用滚动方法,而不是对每行应用滚动方法!