python - 根据时间序列将大熊猫数据框拆分为较小的数据框
问题描述
我有一个包含 38 个时间序列的熊猫数据框。每个时间序列从 0 秒开始,在 1 秒结束,时间序列在 0 到 1 之间的以秒为单位的数字列是我对每个时间序列的开始位置和结束位置的唯一提示。
我想拆分原始的 df int 38 数据帧。
我想我可以简单地遍历行并执行检查,直到值达到 1s 然后拆分,但我想知道是否有更智能和最快的方法来做到这一点?在某个时候,我将拥有 38.000 个时间序列......
数据框看起来像:
行 ¦ var1 ¦ var2 ¦... ¦ 时间
第 1 行 ¦ x ¦ y ¦ ... ¦ 0.0
.
第 100 行 ¦ x100 ¦ y100 ¦ ... ¦ 1.0
第 101 行 ¦ x101 ¦ y101 ¦ ... ¦ 0.0
.
我想拆分第 100 行中的 df,这样第 101 行是新的不同数据帧的第一行。我会在给定的df中重复这个过程38次。
我的问题与 [1] 不同,因为在这种情况下,该人希望按相同的日期值进行分组,而在我的情况下,我不想按相同的值进行分组。
[1] 将数据帧拆分为多个数据帧
解决方案
感谢@Alollz 的提示
group=[]
for k,g in df.groupby(df.time.eq(1).shift().fillna(0).cumsum()):
group.append(g)
您可以拨打您需要的群组
group[0] , group[1] , group[2]....
细节
起始数据框
row var1 var2 time
row1 x1 y1 0
row2 x2 y2 0
row3 x3 y3 0
row4 x4 y4 0
row5 x5 y5 0
row6 x6 y6 0
row7 x7 y7 0
row8 x8 y8 1
row9 x9 y9 0
row10 x10 y10 0
row11 x11 y11 0
row12 x12 y12 0
row13 x13 y13 0
row14 x14 y14 1
row15 x15 y15 0
row16 x16 y16 0
row17 x17 y17 0
row18 x18 y18 0
,df.time.eq(1).shift().fillna(0).cumsum()
我们实质上是在为我们创建一个列来分组。此处显示与列s
row var1 var2 time s
row1 x1 y1 0 0
row2 x2 y2 0 0
row3 x3 y3 0 0
row4 x4 y4 0 0
row5 x5 y5 0 0
row6 x6 y6 0 0
row7 x7 y7 0 0
row8 x8 y8 1 0
row9 x9 y9 0 1
row10 x10 y10 0 1
row11 x11 y11 0 1
row12 x12 y12 0 1
row13 x13 y13 0 1
row14 x14 y14 1 1
row15 x15 y15 0 2
row16 x16 y16 0 2
row17 x17 y17 0 2
row18 x18 y18 0 2
然后我们基本上对 column s 进行分组(即使我们从未创建 column s)。由于每个组本质上都是一个数据框,因此您有单独的数据框。
如果我们使用df.time.eq(1).fillna(0).cumsum()
,我们有在下一个数据帧中变为 1 的行。s2列中显示的分组数据
row var1 var2 time s s2
0 row1 x1 y1 0 0 0
1 row2 x2 y2 0 0 0
2 row3 x3 y3 0 0 0
3 row4 x4 y4 0 0 0
4 row5 x5 y5 0 0 0
5 row6 x6 y6 0 0 0
6 row7 x7 y7 0 0 0
7 row8 x8 y8 1 0 1
8 row9 x9 y9 0 1 1
9 row10 x10 y10 0 1 1
10 row11 x11 y11 0 1 1
11 row12 x12 y12 0 1 1
12 row13 x13 y13 0 1 1
13 row14 x14 y14 1 1 2
14 row15 x15 y15 0 2 2
15 row16 x16 y16 0 2 2
16 row17 x17 y17 0 2 2
17 row18 x18 y18 0 2 2
推荐阅读
- php - 无法使用 Laravel 中的 foreach 循环从动态输入字段中获取数据
- java - 从命令行构建 Android 应用程序失败
- php - 扫PHP字符串获取价值
- c++ - 减法产生负数的向量大小
- django - django-rest-framework-social-auth 需要客户端密码才能转换令牌
- python - 从 Postgres 到 MariaDB 的 Django 端口 manage.py 迁移错误 SQL 语法错误 1064
- javascript - 三个元素的排序数组
- node.js - 在 node.js、nodemailer 中发送邮件
- powershell - 如何导入 Powershell CSV 月份名称
- reactjs - 当我使用 Visual Studio Code 时,此系统上禁用了运行脚本