时间戳记中的日期之间的groupby和过滤检查另一列

时间:2019-03-12 10:20:12

标签: python pandas dataframe

我有一个产品数据框,其中有我的输入和输出。我想做一个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)

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分钟的时间。