【问题标题】:Extract maximums from pandas time series data over fixed time steps在固定时间步长上从 pandas 时间序列数据中提取最大值
【发布时间】:2021-01-07 10:01:44
【问题描述】:

我有 3 列的数据。1 是传感器值读数_date_time_time(dtype-datetime64[ns]),其他 2 是传感器读数 wrt 时间戳。读数是 每分钟,我有读数30 天(43,800 行)。 现在我需要为每个小时、每天和每周找到传感器 1 的最大值以及读数的读数日期时间。我需要的输出是读数日期时间作为一列,最大读数在另一列。请帮助解决这个问题。数据样本附在截图中https://i.stack.imgur.com/jAtLE.png

【问题讨论】:

  • 您可能想查看这篇在此处解决类似问题的 stackoverflow 帖子。[链接]stackoverflow.com/questions/55307132/…
  • @AresZephyr buddy 我已经看过这篇文章,但无法将它与我的问题陈述联系起来。
  • 你能发布一些示例数据吗?我可以尝试写一些东西来解决它。
  • @AresZephyr i.stack.imgur.com/jAtLE.png 这是我的示例数据截图的链接。这样可以吗?
  • Jayk,关于这个问题还有另一条不明显但相关的信息。您是否只想实现您的目标一次,或者您是否想解决这个问题,以便可以定期处理此类数据。就像每个月一次。如果只是一次性的,将数据导入电子表格程序并使用良好的单元格公式可能是最省时的解决方案。如果连续说,发送到网站或其他程序,那可能需要不同的解决方案。

标签: python time


【解决方案1】:

如果您每分钟恰好有一个读数,则每小时您有 60 读数,每天您有 60*24=1440 读数,每周您有 60*24*7=10080 读数。

因此,假设您的数据框称为df,此代码应该可以完成这项工作(我只会发布每小时最大值,适应其他情况很简单,您只需将minutes_per_dt 更改为@987654326 @ 每日或minutes_per_dt = 10080 每周):

tot_readings = 43800 # total number of rows in your df
# find max per hour:
minutes_per_dt = 60
max_values_per_dt = pd.DataFrame({}) # final data frame where to store maxs and times
for h in np.arange(0, tot_readings, minutes_per_dt):
    df_sliced = df[h:h+minutes_per_dt] # takes only minutes_per_dt rows starting from h
    tmp_max = pd.DataFrame(df_sliced.max()).transpose() # here you have a row with the time and the max values for the current hour analysed in the loop
    max_values_per_dt = max_values_per_dt.append(tmp_max) # append the maxs and the times into your final dataframe

这个想法是将数据帧切成所需的块(小时、天或周),并找到所有列的切片数据帧的最大值。找到该切片的最大值后,您可以将结果附加到最终数据帧(max_values_per_dt 这是您想要的输出)以存储与所有切片的最大值相对应的所有行所需时间步的数据帧。

【讨论】:

  • 我认为 tmp_max 正在获取最大切片值,但没有时间戳,建议更正(当 df 只有一个列值时,否则应该切片值列):tmp_max = df.loc[df_sliced.idxmax()]
猜你喜欢
  • 2021-04-27
  • 1970-01-01
  • 2021-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
相关资源
最近更新 更多