【问题标题】:Splitting large dataframe when there is a jump in timestamp时间戳跳跃时拆分大数据帧
【发布时间】:2019-10-11 09:46:55
【问题描述】:

我有一个大型数据框,其中日期时间为索引,不同的传感器为列。 传感器以 1 秒的采样频率测量不同的量

                         sensor1  sensor2   sensor3 
timestamp
2017-12-03 16:13:01        20        4465     156      
2017-12-03 16:13:02        20        4466     158
2017-12-03 16:13:03        20        4466     158
.
.
2017-12-03 16:45:05        30        4468     178
2017-12-03 16:45:06        30        4468     178     <I want to split the dataframe at jumps in
2017-12-03 18:00:00        20        4141      89     time like here.
2017-12-03 18:00:01        22        4321      90
2017-12-03 18:00:02        22        4321      90

每当找到时间跳跃时,我想将大数据帧拆分为较小的数据帧。或者换句话说,只要下一个时间步长大于一秒,我就想分割数据帧。

【问题讨论】:

  • 拆分为创建list 的数据帧?喜欢[df1, df2, df3]?
  • 是的,正是我的想法

标签: python pandas dataframe datetime split


【解决方案1】:

我的方法是创建一个带有组计数器的另一列

df['groups'] = (df.index.to_series().diff().dt.seconds > 1).cumsum()

#                      sensor1  sensor2  sensor3  groups
# timestamp                                             
# 2017-12-03 16:13:01       20     4465      156       0
# 2017-12-03 16:13:02       20     4466      158       0
# 2017-12-03 16:13:03       20     4466      158       0
# 2017-12-03 16:45:05       30     4468      178       1
# 2017-12-03 16:45:06       30     4468      178       1
# 2017-12-03 18:00:00       20     4141       89       2
# 2017-12-03 18:00:01       22     4321       90       2
# 2017-12-03 18:00:02       22     4321       90       2

然后groupby这个新专栏:

for ct, data in df.groupby('groups'):
    print(ct, data.drop(columns=['groups']))

# 0                      sensor1  sensor2  sensor3
# timestamp                                     
# 2017-12-03 16:13:01       20     4465      156
# 2017-12-03 16:13:02       20     4466      158
# 2017-12-03 16:13:03       20     4466      158

# 1                      sensor1  sensor2  sensor3
# timestamp                                     
# 2017-12-03 16:45:05       30     4468      178
# 2017-12-03 16:45:06       30     4468      178

# 2                      sensor1  sensor2  sensor3
# timestamp                                     
# 2017-12-03 18:00:00       20     4141       89
# 2017-12-03 18:00:01       22     4321       90
# 2017-12-03 18:00:02       22     4321       90

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 2020-09-20
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    相关资源
    最近更新 更多