按时间序列将大Pandas数据帧分割成小Pandas数据帧

2024-09-27 04:25:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据帧,包含38个时间序列。每个时间序列从0开始,到1结束,一个以秒为单位的数字列在0到1之间,这是关于每个时间序列从何处开始和从何处结束的唯一提示。你知道吗

我想拆分原始df int 38数据帧。你知道吗

我想我可以简单地在行上循环并执行检查,直到值达到1s,然后拆分,但我想知道是否有一种更聪明、最快的方法来实现这一点?总有一天我会有38000个时间序列。。。你知道吗

数据帧看起来像:

行¦var1¦var2¦。。。Ω时间

第1行¦x¦y¦。。。Ω0.0

是的。你知道吗

行100¦x100¦y100¦。。。Ω1.0

第101¦x101¦y101¦行。。。Ω0.0

是的。你知道吗

我想拆分第100行中的df,这样第101行就是新的不同数据帧的第一行。我会在给定的df内重复这个过程38次。你知道吗

我的问题与[1]不同,因为在这种情况下,此人希望按相同的日期值分组,而在我的情况下,我不希望按相同的值分组。你知道吗

[1] Splitting dataframe into multiple dataframes


Tags: 数据方法df时间情况单位序列数字
1条回答
网友
1楼 · 发布于 2024-09-27 04:25:25

谢谢你的提示

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

相关问题 更多 >

    热门问题