Python 将计划信息(开始和结束时间)拆分为较小的间隔
我想列出相关工作计划(包括活动日期、用户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个新列(间隔开始和间隔时间)加上添加的新行,以便在每个间隔中适当显示活动。我仍然希望看到原始的活动开始和结束时间 编辑: 这就是我目前所拥有的。它会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
- 创建所有间隔的表格(每30分钟一次)李>
- 与用户ID日期列表合并,为用户ID有计划的所有日期创建所有间隔的表
- 将其与原始数据帧合并李>
- 如果间隔开始时间为空(因此活动不会在小时或半小时开始),请使用正确的间隔开始时间更新它。我有一个函数用于此
- 按用户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
有趣。到目前为止你取得了什么成就?用代码编辑原始帖子。我只知道必须有更好的方法。有趣。你到目前为止取得了什么成就?用代码编辑原始帖子。我只知道必须有更好的方法。