我有机器故障的数据。数据位于具有date
、id
、failure
和previous_30_days
列的数据帧中。previous_30_days
列当前为全零。我期望的结果是,如果在失败前30天内发生,则用“1”填充previous_30_days
列中的行。我目前可以使用以下代码执行此操作:
failure_df = df[(df['failure'] == 1)] # create a dataframe of just failures
for index, row in failure_df.iterrows():
df.loc[(df['date'] >= (row.date - datetime.timedelta(days=30))) &
(df['date'] <= row.date) & (df['id'] == row.id), 'previous_30_days'] = 1
注意,我还检查了id匹配,因为日期在dataframe中是重复的,所以我不能简单地假设它是前30行。你知道吗
我的代码可以工作,但问题是数据帧有数百万行,而这段代码目前速度太慢。你知道吗
有没有更有效的方法来达到预期的结果?如有任何想法,我们将不胜感激。你知道吗
我对您的代码如何工作(或者应该如何工作)有点困惑,但是这应该会为您指明正确的方向,并且可以很容易地进行调整。通过避免
iterrows
而支持向量化操作,它将更快(对于这个小数据帧,它将比大数据帧快7倍左右,这应该是一个更大的改进)。你知道吗现在,计算当前日期和上一日期之间的天数(按id)。你知道吗
然后根据到上一个日期的天数创建新列。你知道吗
相关问题 更多 >
编程相关推荐