Python:如果数据更新少于15分钟,则检查计数为1,否则为0

时间:2017-12-20 05:36:20

标签: python datetime time-series frequency-analysis

timestamp,value
19/12/2017 12:00:00,12
19/12/2017 12:01:00,13
19/12/2017 12:05:00,15
19/12/2017 12:10:00,23
19/12/2017 12:11:00,46
19/12/2017 12:13:00,12
19/12/2017 12:14:59,34
19/12/2017 12:15:00,33
19/12/2017 12:16:00,33
19/12/2017 12:30:00,87
19/12/2017 12:50:00,44
19/12/2017 12:56:00,54
19/12/2017 1:16:00,54
19/12/2017 1:29:59,54

逻辑:< 15min包括1其他0

以上是我的数据集,现在我想要设置15Min的频率,好像在15Min数据内有新数据 条目将更新为1.如果数据不是15分钟,则条目将更新为0。 注意:如果15分钟,任何一个数据也存在,那么它就是一个。

条件将是; 如果数据在时间戳12:00:00到12:14:59之间,则其他数据为0。 如果有任何缺失的数据也将为0。

代码:

import pandas as pd
df = pd.read_csv('mydata.csv', parse_dates=['timestamp'] )
print (df)
mask=(df['timestamp'].dt.minute<15)
df1 = df[mask]
print (df1)

预期产出:

2017-12-19 12:00:00     12    1    
2017-12-19 12:01:00     13    1  
2017-12-19 12:05:00     15    1  
2017-12-19 12:10:00     23    1  
2017-12-19 12:11:00     46    1
2017-12-19 12:13:00     12    1 
2017-12-19 12:14:59     34    1  
2017-12-19 12:15:00     33    1  
2017-12-19 12:16:00     33    1  
2017-12-19 12:30:00     87    1  
2017-12-19 12:50:00     44    1 
2017-12-19 12:56:00     54    1  
2017-12-19 01:00:00 to 2017-12-19 01:14:59 no data update as 0
2017-12-19 01:16:00     54    0    
2017-12-19 01:29:59     54    0

要求是; 我检查15分钟频率是数据不存在或丢失15分钟比将其设为0并且如果数据在15分钟内存在而不是将其设为1。

1 个答案:

答案 0 :(得分:0)

这是代码可以获得所需的输出并帮助获取图形。

import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('mydata.csv', parse_dates=['timestamp'] )
df['new'] = df['timestamp'].diff().dt.total_seconds().fillna(0).abs().lt(60 * 15).astype(int) 
df = df.sort_values('timestamp', ascending=True)
plt.plot(df['timestamp'], df['new'])
plt.xticks(rotation='vertical')
plt.show()