python - Pandas - groupby 累积时间段
问题描述
这是我的问题:想象一个按时间索引的数据框。
df = pd.DataFrame(index=["00:00:00",
"00:00:08","00:00:14","00:00:21","00:00:23","00:00:49"],data={"col1":["a",
"b","a","a", "c", "d"], "col2":[4,4,4,6,6,7], "col3":[2,17,2,2,3,50]})
我现在想应用一个函数并根据累积时间以 15 秒为间隔对数据进行分组,即对于 00:00:00 - 00:00:15、00:00:00 - 00:00:30、00 之间的时间戳:00:00 - 00:00:45 等
例如,如果 col1 中的值在每个间隔中为“a”,我想将 col2、col3 的所有值相加并除以另一个。
输出应该是这样的:
output
00:00:15 2
00:00:30 2.3333
感谢任何帮助!
解决方案
首先将索引转换为 timedeltas byto_timedelta
并添加15 seconds
以进行移位,然后仅通过和( )过滤a
行。boolean indexing
Series.eq
==
然后,然后和最后将列除以:DataFrame.resample
sum
DataFrame.cumsum
Series.div
df.index = pd.to_timedelta(df.index) + pd.Timedelta(15, unit='s')
df = df[df['col1'].eq('a')].resample('15S').sum().cumsum()
df['out'] = df['col2'].div(df['col3'])
print (df)
col2 col3 out
00:00:15 8 4 2.000000
00:00:30 14 6 2.333333
另一种方法是转换为datetime
s:
df.index = pd.to_datetime(df.index) + pd.Timedelta(15, unit='s')
df = df[df['col1'].eq('a')].resample('15S').sum().cumsum()
df['out'] = df['col2'].div(df['col3'])
print (df)
col2 col3 out
2019-03-21 00:00:15 8 4 2.000000
2019-03-21 00:00:30 14 6 2.333333
推荐阅读
- django - 未找到“”的反向。'' 不是有效的视图函数或模式名称 - django 修复
- dotnetnuke - 2sxc cms.run 预填充编辑
- spring-boot - AspectJ 自定义参数注释在 Spring Boot 中不起作用
- c++ - C++ - 套接字编程 - 多线程程序抛出致命的程序退出请求
- reactjs - 我需要为 react-youtube 添加哪个加载器
- java - 如何删除“错误:找不到符号 holder.name.setText(personNames.get(position))”的错误
- python - Neo4j图形平台如何将数据发布到搜索框
- http-post - Microsoft Teams HttpPost 操作因 BadRequest 而失败
- jquery - Jquery - 在输入悬停时显示 div
- npm - 使用 KotlinJS 构建独立的 NPM 模块