我有一个产品数据框,其中有我的输入和输出。我想做一个30分钟的滑动窗口,看看在30分钟内产品是否进出。我当时在考虑使用groupby,然后过滤这些组以仅获取具有in(1)和out(0)的那些组。
但是也许有一种我没有想到的更好的方法。
示例:
code timestamp in_out
0 104 2018-12-18 16:15:00 1
1 105 2018-12-18 16:15:00 1
2 105 2018-12-18 16:35:00 0
3 107 2018-12-19 16:15:00 1
4 104 2019-01-13 10:00:00 0
5 502 2018-12-18 16:15:00 0
编辑:
我谈论的groupby代码是:
time1 = df.iloc[0]['timestamp']
time1end = time1 + timedelta(minutes=30)
grp1 = df[(df['timestamp'] >= time1) & (df['timestamp'] <= time1end)]
grp1.groupby(by='subject_code').filter(lambda x: len(x) > 1)
答案 0 :(得分:1)
我建议您这样做:
确保时间戳是日期时间的格式
df['timestamp'] = pd.to_datetime(df['timestamp'], infer_datetime_format=True)
然后获取发生的代码(如果您确定每个代码都重复了两次,则可以跳过此步骤)
df2 = df.groupby('code').filter(lambda x: x['in_out'].mean()==0.5)
我用均值== 0.5进行了过滤,这意味着一次又一次,您可以将其替换为更智能的内容 现在,让我们解决问题
df3 = df2.groupby('code')['timestamp'].diff().dropna()
这段代码的作用是,对于每个代码,它都会计算出时差,然后您可以花费不到30分钟的时间。