这个很难解释,但是我有一个日志文件,用户共享设备的启动时间不同。我正在尝试添加一列,该列根据下一个人的开始时间来计算结束时间。不确定这个概念叫什么,但看起来类似于将时间/结束时间列分配到python 3而不是SQL。
,数据框看起来像:
Team Device_Num User Start_Time
A 1234 Joe 1/18/2019 8:36
A 1234 Sue 1/18/2019 9:16
A 1234 Mary 2/1/2019 12:26
A 1234 Joe 2/1/2019 14:04
B 3333 Jerry 1/17/2019 20:27
C 5555 Bob 1/15/2019 3:08
C 5555 Tim 1/17/2019 19:58
C 4444 Tim 1/18/2019 07:35
试图创建一个新列,该列是基于其他列的唯一组合来假定结束时间的,有点像图书馆书籍,以便:
End_Time
1/18/2019 9:15 #<-- Based on Sue's start time - 1 min
2/1/2019 12:25 #<-- Based on Mary's start time - 1 min
2/1/2019 14:03 #<-- Based on Joe's start time - 1 min
today() #<-- Joe still has it
today() #<-- Jerry still has it
1/17/2019 19:57 #<-- Based on Tim's start time - 1 min
today() #<-- Tim still has it
today() #<-- Tim has this unique device.
不确定在编码上从哪里开始,请始终感谢帮助。
继续对其进行处理,并在集体比/申请(shift)操作下找到答案:
对DF进行排序,以便device_num正在上升,并且start_time正在上升。
# Lag (groupby/shift) function
df['End_Time'] = df.groupby(['Device_Num'])['Start_Time'].shift(-1)
# Alternative to take into account other columns.
df['End_Time'] = df.groupby(['Device_Num', 'Team'])['Start_Time'].shift(-1)
# Offset time by 1 minute
df['End_Time'] = df.End_Time - pd.DateOffset(minutes = 1)
# Fill in blanks with now()
df.End_Time.fillna(pd.datetime.now().strftime("%m/%d/%Y %I:%M"), inplace=True)