根据时间序列将大熊猫数据帧拆分为较小的数据帧

时间:2019-09-06 14:28:49

标签: python pandas time-series

我有一个包含38个时间序列的熊猫数据框。每个时间序列从0s开始,以1s完成,一个以秒为单位的时间在0到1之间的数字列是我唯一知道每个时间序列在哪里开始和在哪里结束的提示。

我想分割原始的df int 38个数据帧。

我想我可以简单地遍历行并执行检查,直到值达到1s,然后拆分,但是我想知道是否有更聪明,最快的方法吗?到某个时候,我将有38.000个时间序列...

数据框看起来像:

行φ1var1φ2...时间

第1行x x y ... ... 0.0

第100行x100 x100 x1.0 ...

第101行¦ x101��y101��... ¦ 0.0

我想在第100行中拆分df,以使第101行是新的不同数据帧的第一行。我将在给定的df中重复此过程38次。

我的问题与[1]不同,因为在这种情况下,此人想要按相同的日期值分组,而在我的情况下,我不想按相同的值分组。

[1] Splitting dataframe into multiple dataframes

1 个答案:

答案 0 :(得分:2)

感谢@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

然后,我们基本上对s列进行分组(即使我们从未创建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