我在以下形式的pandas中有一个数据框:
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
请注意,索引不是时间戳列。但我想重新采样(或以某种方式对数据进行分区)以反映每分钟,每小时,每天等光柱的平均值。我已经研究了pandas提供的resample
方法,它需要数据帧到有一个数据时间索引的方法工作(除非我误解了这一点)。
所以我的第一个问题是,我可以重新索引数据帧以将时间戳作为索引(请注意,并非每行都有唯一的时间戳,并且对于每个时间戳,大约有30行具有相同的时间戳,每个代表一个传感器)。
如果没有,是否还有其他方法可以实现另一个数据帧,该数据帧具有每小时,每天,每月等的平均光照值。?
任何帮助都将不胜感激。
答案 0 :(得分:6)
你是对的 - 需要DatetimeIndex
,TimedeltaIndex
或PeriodIndex
其他错误:
TypeError:仅对DatetimeIndex,TimedeltaIndex或PeriodIndex有效,但得到了' Index'
的实例
如果原始index
很重要,那么您必须先reset_index
和set_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
答案 1 :(得分:0)
对于Pandas 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
答案 2 :(得分:0)
这是重新采样的方法。
您可以使用以下方法以T
间隔进行采样。
如果每个minute
中都有原始数据,则新的重采样数据将以2 min
间隔。
您可以使用3T, 4T....
满足您需要的任何T
值。
df_2T = df.resample('2T', on = 'timestamp').mean()
每小时一次
df_hourly = df.resample('60T', on = 'timestamp').mean()
每天
df_daily = df.resample('1440T', on = 'timestamp').mean()
注意:一天有60 * 24 = 1440分钟