如何在Python中创建填充事件间隔时间的行

如何在Python中创建填充事件间隔时间的行,python,date,datetime,fill,Python,Date,Datetime,Fill,我正在为生存分析构建一个数据框架,从2018-01-01 00:00:00开始到今天结束。对于与ID关联的事件,我有两列,分别显示开始时间和结束时间 但是,我需要添加时间介于之间的行,该事件未被观察到 在这里,我展示了我所拥有的: +--------+-----+-----+---------------------+---------------------+ | State | ID1 | ID2 | Start_Time | End_Time |

我正在为生存分析构建一个数据框架,从2018-01-01 00:00:00开始到今天结束。对于与ID关联的事件,我有两列,分别显示开始时间和结束时间

但是,我需要添加时间介于之间的行,该事件未被观察到

在这里,我展示了我所拥有的:

+--------+-----+-----+---------------------+---------------------+ | State | ID1 | ID2 | Start_Time | End_Time | +--------+-----+-----+---------------------+---------------------+ | State1 | 111 | AA1 | 2019-12-04 04:00:00 | 2019-12-04 19:30:00 | +--------+-----+-----+---------------------+---------------------+ | State1 | 111 | AA1 | 2019-12-08 06:30:00 | 2019-12-20 10:00:00 | +--------+-----+-----+---------------------+---------------------+ | State1 | 111 | AA1 | 2019-12-22 11:00:00 | 2019-12-22 23:00:00 | +--------+-----+-----+---------------------+---------------------+ | State1 | 111 | AA1 | 2019-12-26 08:00:00 | 2019-12-29 16:30:00 | +--------+-----+-----+---------------------+---------------------+ | State2 | 112 | AA2 | 2018-09-19 08:00:00 | 2018-09-20 04:30:00 | +--------+-----+-----+---------------------+---------------------+ | State2 | 112 | AA2 | 2018-09-25 16:30:00 | 2018-09-26 23:00:00 | +--------+-----+-----+---------------------+---------------------+ | State2 | 112 | AA2 | 2018-09-27 01:30:00 | 2018-09-27 10:30:00 | +--------+-----+-----+---------------------+---------------------+ 我认为我必须在状态、ID1和ID2变量上设置一个条件,以便不占用前面组的时间


有什么建议吗?

也许这个解决方案适合你。 我对数据帧进行切片只是为了获取日期,但它对您有效您可以在考虑状态和ID的情况下重复它

df = df[['Start_Time', 'End_Time']]

fill_date = []
for item in range(1,df.shape[0],1):
    if df['Start_Time'][item] - df['End_Time'][item-1] == 0:
        ""
    else: 
        fill_date.append([df['End_Time'][item-1],df['Start_Time'][item]])

df_add = pd.DataFrame(fill_date) 
df_add.columns = ['Start_Time', 'End_Time']
最后,我做了一个concat,将原始数据框与未观察事件的日期的新df连接起来


到目前为止你写的python在哪里?我把代码放在上面了!该代码无法运行。请提供我们需要自己测试的所有内容。代码已更新。我想我必须在分类变量状态ID1和ID2上设置一个条件。你的解决方案非常接近预期的解决方案。然而,它在8号线中断了。从第12个月跳到第9个月。这里有一个想法是必须考虑状态变量,ID1和ID2,因为它们代表不同的主题。是的,对,这个小的例子没有考虑到其他变量,我认为你只需要通过状态、ID1和ID2迭代地重复它。
fill_date = []
for item in range(1,df.shape[0],1):
    if (df['End_Time'][item-1] - df['Start_Time'][item]) == 0:
        ""
    else: 
        fill_date.append([df["State"][item-1], df["ID1"][item-1], df["ID2"][item-1], df['End_Time'][item-1],df['Start_Time'][item]])

df_add = pd.DataFrame(fill_date)
df_add.columns = ["State", "ID1", "ID2", 'Start_Time', 'End_Time']

df_output = pd.concat([df[["State", "ID1", "ID2", "Start_Time", "End_Time"]], df_add],axis = 0)
df_output = df_output.sort_values(["State", "ID2", "Start_Time"], ascending=True)
df = df[['Start_Time', 'End_Time']]

fill_date = []
for item in range(1,df.shape[0],1):
    if df['Start_Time'][item] - df['End_Time'][item-1] == 0:
        ""
    else: 
        fill_date.append([df['End_Time'][item-1],df['Start_Time'][item]])

df_add = pd.DataFrame(fill_date) 
df_add.columns = ['Start_Time', 'End_Time']
df_final = pd.concat([df,df_add],axis = 0)
df_final.sort_index(0)