【发布时间】:2018-03-20 13:35:15
【问题描述】:
我在创建一个数据框时遇到问题,该数据框包含一个温度测量值所在的时间间隔。至于现在,数据框的索引为时间,另一列为测量值,我希望将时间转换为间隔 12 小时,测量值是该时间间隔中值的平均值。
measurement
time
2016-11-04 08:49:25 17.730000
2016-11-04 10:23:52 18.059999
2016-11-04 11:02:09 18.370001
2016-11-04 12:04:20 18.090000
2016-11-04 14:26:43 18.320000
所以不是每次都与测量相关,我想要的是 12 小时的平均值,如下所示:
measurement
time
2016-11-04 00:00:00 - 2016-11-04 12:00:00 17.730000
2016-11-04 12:00:00 - 2016-11-05 00:00:00 18.059999
2016-11-05 00:00:00 - 2016-11-05 12:00:00 18.370001
2016-11-05 12:00:00 - 2016-11-06 00:00:00 18.090000
2016-11-06 00:00:00 - 2016-11-06 12:00:00 18.320000
有没有一种简单的方法可以用 pandas 做到这一点?
稍后我想将测量值转换为间隔,以便数据变为布尔值,如下所示:
17.0-18.0 18.0-19.0 19.0-20
time
2016-11-04 00:00:00 - 2016-11-04 12:00:00 1 0 0
2016-11-04 12:00:00 - 2016-11-05 00:00:00 0 1 0
2016-11-05 00:00:00 - 2016-11-05 12:00:00 0 1 0
2016-11-05 12:00:00 - 2016-11-06 00:00:00 0 1 0
2016-11-06 00:00:00 - 2016-11-06 12:00:00 0 1 0
编辑: 我使用了 Coldspeed 首次发布的解决方案
df = pd.DataFrame({'timestamp':time.values, 'readings':readings.values})
df = df.groupby(pd.Grouper(key='timestamp', freq='12H'))['readings'].mean()
v = pd.cut(df, bins=[17,18,19,20,21,22,23,24,25,26,27,28], labels=['17-18','18-19','19-20','20-21','21-22','22-23','23-24','24-25','25-26','26-27','27-28'])
我知道垃圾箱和标签可以通过 for 循环完成,但这只是一个快速修复。 groupby 函数以 12 小时为频率对 'timestamp' 的值进行分组,并获取延时中的读数平均值。
然后使用 cut 函数将均值分类到它们的类别中。
结果:
17-18 18-19 19-20 20-21 21-22 22-23 23-24 24-25 \
timestamp
2016-11-04 00:00:00 0 1 0 0 0 0 0 0
2016-11-04 12:00:00 0 1 0 0 0 0 0 0
2016-11-05 00:00:00 0 0 0 0 0 0 0 0
2016-11-05 12:00:00 1 0 0 0 0 0 0 0
2016-11-06 00:00:00 1 0 0 0 0 0 0 0
2016-11-06 12:00:00 0 0 0 0 0 0 0 0
2016-11-07 00:00:00 0 1 0 0 0 0 0 0
2016-11-07 12:00:00 1 0 0 0 0 0 0 0
2016-11-08 00:00:00 0 0 0 0 0 0 0 0
2016-11-08 12:00:00 0 0 0 0 0 0 0 0
2016-11-09 00:00:00 1 0 0 0 0 0 0 0
2016-11-09 12:00:00 1 0 0 0 0 0 0 0
2016-11-10 00:00:00 0 1 0 0 0 0 0 0
2016-11-10 12:00:00 0 0 0 0 0 0 0 0
2016-11-11 00:00:00 0 0 0 0 0 0 0 0
2016-11-11 12:00:00 0 0 0 0 0 0 0 0
2016-11-12 00:00:00 0 0 0 0 0 0 0 0
2016-11-12 12:00:00 0 0 0 0 0 0 0 0
2016-11-13 00:00:00 0 0 0 0 0 0 0 0
2016-11-13 12:00:00 0 0 0 0 0 0 0 0
2016-11-14 00:00:00 0 0 0 0 0 0 0 0
2016-11-14 12:00:00 0 1 0 0 0 0 0 0
2016-11-15 00:00:00 0 0 0 1 0 0 0 0
2016-11-15 12:00:00 0 0 0 0 0 1 0 0
2016-11-16 00:00:00 0 0 0 0 0 0 1 0
2016-11-16 12:00:00 0 0 0 0 0 0 0 0
2016-11-17 00:00:00 0 0 0 0 0 0 0 0
【问题讨论】:
-
您的索引与您的数据不匹配。改造它真的有任何意义吗?
标签: python pandas boolean intervals