如何根据时间条件进行 cumsum - 对 pandas 进行重新采样?

2024-03-06

我有一个如下所示的数据框

df = pd.DataFrame({
   'subject_id':[1,1,1,1,1,1],
   'time_1' :['2173-04-03 10:00:00','2173-04-03 10:15:00','2173-04-03 
              10:30:00','2173-04-03 10:45:00','2173-04-03 11:05:00','2173- 
              04-03 11:15:00'],
   'val' :[5,6,5,6,6,6]
})

我想找到按顺序出现的值的总持续时间。下面的例子将帮助您理解

从上面的截图可以看出6依次发生从10:45 to 23:59而其他值(尽管可以是任何实时值)根本不按顺序排列。

我做了这样的事情但没有给出预期的输出。它汇总了所有值

df['time_1'] = pd.to_datetime(df['time_1'])
df['seq'] = df['val'] == df['val'].shift(-1)

s=pd.to_timedelta(24,unit='h')-(df.time_1-df.time_1.dt.normalize())
df['tdiff'] =df.groupby(df.time_1.dt.date).time_1.diff().shift(-1).fillna(s).dt.total_seconds()/3600
df.groupby([df['seq'] == True])['tdiff'].cumsum() # do cumulative sum only when the values are in sequence

如何根据条件对组进行累计求和?

我希望我的输出如下所示。你看13:15因为我们在接下来的数据中看不到任何其他价值13:15从第一次出现开始的小时6这是在10:45 (24:00 hr - 10:45 gives 13:15)

测试数据框

df = pd.DataFrame({
     'subject_id':[1,1,1,1,1,1,1,1,1,1,1],
     'time_1' :['2173-04-03 12:35:00','2173-04-03 12:50:00','2173-04-03 
     12:59:00','2173-04-03 13:14:00','2173-04-03 13:37:00','2173-04-04 
     11:30:00','2173-04-05 16:00:00','2173-04-05 22:00:00','2173-04-06 
     04:00:00','2173-04-06 04:30:00','2173-04-06 08:00:00'],
     'val' :[5,5,5,5,10,5,5,8,3,4,6]
   })

IIUC,尝试使用:

m=df.groupby(df.val.ne(df.val.shift()).cumsum()).first().rename_axis(None)
c=pd.to_timedelta(24,unit='h')-(m.time_1-m.time_1.dt.normalize())
final=m.assign(cumsum=m.time_1.diff().shift(-1).fillna(c))

   subject_id              time_1  val   cumsum
1           1 2173-04-03 10:00:00    5 00:15:00
2           1 2173-04-03 10:15:00    6 00:15:00
3           1 2173-04-03 10:30:00    5 00:15:00
4           1 2173-04-03 10:45:00    6 13:15:00

Details:

df.val.ne(df.val.shift()).cumsum()评估每行的值是否发生变化,并将相同的值分组到一个组中。

基于这个组,我们进行分组并获得每个组的第一个条目。然后我们发现diff() from time_1并在上方移动 1 个位置以与顶部索引对齐。 fillna 与 24 小时的差异。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据时间条件进行 cumsum - 对 pandas 进行重新采样? 的相关文章

随机推荐