假设我有一个日期时间间隔未知的数据帧:
data[0]:
mintime check
1375 2020-02-18 12:17:51.275000064+00:00 GO1
1376 2020-02-18 12:17:56.484999936+00:00 GO1
1377 2020-02-18 12:18:06.020000+00:00 GO1
1378 2020-02-18 12:18:10.922000128+00:00 NOGO
1379 2020-02-18 14:47:48.353999872+00:00 GO2
1380 2020-02-18 14:47:48.768000+00:00 GO2
1381 2020-02-18 14:48:03.120000+00:00 GO2
我正在尝试拆分数据帧。也就是说,如果日期时间之间的间隔不超过15秒,它们将被分组到一个新的数据帧中
我尝试这样做是从check
列开始的。该列说明其行上的值和以下值是在15秒内(GO)还是超过15秒内(NOGO)分开的
我在GO后面添加一个数字的原因是为了能够区分GO的组。这是我的尝试代码:
databds = []
intervalo = pd.Timedelta(seconds = 15)
p = 0
for x in range(0,len(data)):
for y in range(0,len(data[x])-1):
t = pd.to_datetime(data[x]['mintime'][y][0:19])
tp1 = pd.to_datetime(data[x]['mintime'][y+1][0:19])
resta = tp1 - t
if resta > intervalo:
data[x]['check'][y] = "NOGO"
p = p + 1
else:
data[x]['check'][y] = "{}{}".format("GO", p)
for z in range(0,p):
datito = data[x].loc[data[x]['check'] == "{}{}".format("GO", z)]
databds.append(datito)
这一过程漫长,对资源要求很高。我相信一定有更简单的方法。我尝试过应用熊猫重采样,但没有成功
更新的答案:
通过
pd.to_datetime
将mintime
列转换为datetime用0计算秒/填充NAN值的差值,并检查差值是否大于15秒。拿
cumsum
的结果,并使用groupby
输出:
相关问题 更多 >
编程相关推荐