没有日期时间索引的 pandas dataframe 每天重新采样

新手上路,请多包涵

我在以下形式的熊猫中有一个数据框:

       timestamps         light
7   2004-02-28 00:58:45 150.88
26  2004-02-28 00:59:45 143.52
34  2004-02-28 01:00:45 150.88
42  2004-02-28 01:01:15 150.88
59  2004-02-28 01:02:15 150.88

这里注意索引不是时间戳列。但我想重新采样(或以某种方式对数据进行分类)以反映光柱每分钟、每小时、每天等的平均值。我研究了 resample 熊猫提供的方法,它需要dataframe 为该方法提供数据时间索引(除非我误解了这一点)。

  1. 所以我的第一个问题是,我能否重新索引数据帧以将时间戳作为索引(请注意,并非每一行都有唯一的时间戳,对于每个时间戳,大约有 30 行具有相同的时间戳,每行代表一个传感器)。

  2. 如果没有,是否有其他方法可以实现另一个具有每小时、每天、每月等光的平均值的数据框?

任何帮助,将不胜感激。

原文由 Nikhil 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 440
2 个回答

你是对的 - 需要 DatetimeIndex , TimedeltaIndexPeriodIndex 否则错误:

TypeError:仅对 DatetimeIndex、TimedeltaIndex 或 PeriodIndex 有效,但得到了“Index”的实例

所以你必须首先 reset_indexset_index 如果原始 index 很重要:

 print (df.reset_index().set_index('timestamps'))
                     index   light
timestamps
2004-02-28 00:58:45      7  150.88
2004-02-28 00:59:45     26  143.52
2004-02-28 01:00:45     34  150.88
2004-02-28 01:01:15     42  150.88
2004-02-28 01:02:15     59  150.88

如果不仅 set_index

 print (df.set_index('timestamps'))
                      light
timestamps
2004-02-28 00:58:45  150.88
2004-02-28 00:59:45  143.52
2004-02-28 01:00:45  150.88
2004-02-28 01:01:15  150.88
2004-02-28 01:02:15  150.88

然后 resample

 print (df.reset_index().set_index('timestamps').resample('1D').mean())
            index    light
timestamps
2004-02-28   33.6  149.408

原文由 jezrael 发布,翻译遵循 CC BY-SA 3.0 许可协议

对于熊猫版本 0.19.0 和更新版本,您可以使用 on 关键字:

 df.resample('H', on='timestamps').mean()

结果:

                       light
timestamps
2004-02-28 00:00:00  147.20
2004-02-28 01:00:00  150.88

原文由 Stef 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题