Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将计划信息(开始和结束时间)拆分为较小的间隔_Python_Time Series - Fatal编程技术网

Python 将计划信息(开始和结束时间)拆分为较小的间隔

Python 将计划信息(开始和结束时间)拆分为较小的间隔,python,time-series,Python,Time Series,我想列出相关工作计划(包括活动日期、用户ID、活动、活动开始日期/时间、活动结束日期/时间),并将其分为30分钟的时间间隔,从一小时和半小时开始,列出该时间间隔中包含的活动的总时间 鉴于 打印(df) 活动\u日期用户\u id活动活动\u开始时间活动\u结束时间 6月11日北京银行电话2019年11月6日8:00 2019年11月6日9:00 2019年11月6日9:00 2019年11月6日9:15 2019年11月6日9:15 2019年11月11日11:15 6月11日北京银行午餐201

我想列出相关工作计划(包括活动日期、用户ID、活动、活动开始日期/时间、活动结束日期/时间),并将其分为30分钟的时间间隔,从一小时和半小时开始,列出该时间间隔中包含的活动的总时间

鉴于

打印(df) 活动\u日期用户\u id活动活动\u开始时间活动\u结束时间 6月11日北京银行电话2019年11月6日8:00 2019年11月6日9:00 2019年11月6日9:00 2019年11月6日9:15 2019年11月6日9:15 2019年11月11日11:15 6月11日北京银行午餐2019年11月6日11:15 2019年11月6日12:15 我希望这是结果

打印(df) 间隔\u开始时间\u在\u间隔活动\u日期用户\u id活动活动\u开始时间活动\u结束时间 2019年11月6日8:00 30 2019年6月11日北京银行电话2019年11月6日8:00 2019年11月6日9:00 2019年11月6日8:30 2019年6月11日北京银行电话2019年11月6日8:00 2019年11月6日9:00 2019年11月6日9:00 2015年6月11日bob break 2019年11月6日9:00 2019年11月6日9:15 2019年11月6日9:00 2019年6月15日北京银行电话2019年11月6日9:15 2019年11月11日11:15 2019年11月6日9:30 2019年6月11日北京银行电话2019年11月6日9:15 2019年11月11日11:15 2019年11月6日10:00 30 2019年6月11日北京银行电话2019年11月6日9:15 2019年11月6日11:15 2019年11月6日10:30 2019年6月11日北京银行电话2019年11月6日9:15 2019年11月11日11:15 2019年11月6日11:00 30 2019年6月11日北京银行电话2019年11月6日9:15 2019年11月6日11:15 2019年11月6日11:30 2019年6月11日北京银行电话2019年11月6日9:15 2019年11月11日11:15 2019年11月6日12:00 2019年6月15日北京银行电话2019年11月6日9:15 2019年11月11日11:15 2个新列(间隔开始和间隔时间)加上添加的新行,以便在每个间隔中适当显示活动。我仍然希望看到原始的活动开始和结束时间

编辑: 这就是我目前所拥有的。它会

  • 创建所有间隔的表格(每30分钟一次)
  • 与用户ID日期列表合并,为用户ID有计划的所有日期创建所有间隔的表
  • 将其与原始数据帧合并
在这一点上,我有一个表,其中包含所有用户ID的所有间隔,并且正确标记了活动开始的间隔。但是,如果活动没有在时间间隔内开始(例如,活动在9:15而不是9:00或9:30开始),则时间间隔开始时间为空。所有中间间隔都存在,但为空(例如,从9:00开始并运行到10:00的活动…列出了9:30间隔,但活动信息为空)

剩下的

  • 如果间隔开始时间为空(因此活动不会在小时或半小时开始),请使用正确的间隔开始时间更新它。我有一个函数用于此
  • 按用户ID、活动开始时间、间隔时间和cooy活动信息向下排序,以填写活动信息(例如,获取9:00-10:00活动的信息并更新9:30间隔)
我只知道一定有更好的办法

import numpy as np
import pandas as pd
import datetime


from pandas import Series, DataFrame

# 
# insert code to a create dataframe as df
# df has schedule data as documented elsewhere
#

#Create interval List
interval_list = list(range(0, 48))
start_of_day = datetime(2019,1,1,0,0,0)
interval_times = pd.DataFrame()
for x in interval_list:
    minutes_into_day = x * 30
    start_of_interval =  (start_of_day + timedelta(minutes=minutes_into_day)).time()
    interval_times = interval_times.append(pd.DataFrame({'interval_start': start_of_interval, 'joiner': 'joiner'}, index=[0]), ignore_index=True)
interval_times['joiner'] = 'joiner'

#Create id_date List
id_date = df.groupby(['user_id', 'date'], as_index=False)['activity'].count().copy()
id_date = id_date.drop('activity', axis=1)
id_date['joiner'] = 'joiner'
id_date

#merge Interval & ID_date
user_ids_interval_date_times = pd.merge(interval_times, id_date)
user_ids_interval_date_times['activity_start_time'] = user_ids_interval_date_times.apply(lambda r : pd.datetime.combine(r['date'],r['interval_start']),1)

#merge with df 
df_temp = pd.merge(df, user_ids_interval_date_times, how='outer')

#if interval is null, then update with interval floor
def floor_dt(dt, delta):
    return datetime.datetime.min + math.ceil((dt - datetime.datetime.min) / delta) * delta - delta



#Sort by ID & activity_start_time

#copy everything down


df_temp

有趣。到目前为止你取得了什么成就?用代码编辑原始帖子。我只知道必须有更好的方法。有趣。你到目前为止取得了什么成就?用代码编辑原始帖子。我只知道必须有更好的方法。