python - 如何根据时间条件进行 cumsum - 重新采样熊猫?
问题描述
我有一个如下所示的数据框
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
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
详情:
df.val.ne(df.val.shift()).cumsum()
评估值是否每行都发生变化,并将相同的值分组到一个组中。
基于这个组,我们分组并获得每个组的第一个条目。然后我们diff()
从time_1
上面找到并移动 1 个位置以与顶部索引对齐。fillna 与 24 小时不同。
推荐阅读
- mysql - 为什么撤消 MySQL innodb 缓冲池中的日志条目 (MySQL 5.7)
- php - 使用 Xpath 进行部分匹配
- c++ - 如何从内联模板方法返回通用向量迭代器?
- python - 如何使用 NaiveBayesClassifier 和 movie_reviews 语料库进行交叉验证
- python - 如何修复 Python 3.7 中的“预期整数参数,得到浮点数”错误
- node.js - 调试我已经实例化的 nodejs 链代码
- google-apps-script - 在 API 范围规范中定义整列
- python - 如何从 Django 的上下文中向表中添加类
- node.js - 从 Index.html 到 controller.js 将变量传递给 React 编译的应用程序
- google-cloud-functions - 从 CLI 调用 gcloud 函数时如何从文件中传递数据?