每小时重新采样数据帧
Posted
技术标签:
【中文标题】每小时重新采样数据帧【英文标题】:resample dataframe for every hour 【发布时间】:2018-08-26 22:43:13 【问题描述】:我想通过将值替换为每小时的平均值来重新采样 Sms 、call 和 Internet 列中的数据。
代码 1 已尝试:
df1.reset_index().set_index('TIME').resample('1H').mean()
错误:仅对 DatetimeIndex、TimedeltaIndex 或 PeriodIndex 有效,但获得了 'Index' 的实例
代码 2 已尝试:
df1['TIME'] = pd.to_datetime(data['TIME'])
df1.CALL.resample('60min', how='mean')
错误:仅对 DatetimeIndex、TimedeltaIndex 或 PeriodIndex 有效,但获得了“RangeIndex”实例 数据框:
ID TIME SMS CALL INTERNET
0 1 2013-11-30 23:00:00 0.277204 0.273629 13.674575
1 1 2013-11-30 23:10:00 0.341536 0.058176 13.330858
2 1 2013-11-30 23:20:00 0.379427 0.054601 11.329552
3 1 2013-11-30 23:30:00 0.600781 0.218489 13.166163
4 1 2013-11-30 23:40:00 0.405565 0.134176 13.347791
5 1 2013-11-30 23:50:00 0.187700 0.080738 12.434744
6 1 2013-12-01 00:00:00 0.282651 0.135964 13.860353
7 1 2013-12-01 00:10:00 0.109826 0.056388 12.583463
8 1 2013-12-01 00:20:00 0.348638 0.053438 12.644995
9 1 2013-12-01 00:30:00 0.138375 0.054062 12.251733
10 1 2013-12-01 00:40:00 0.054062 0.163803 11.292642
df1.dtypes
ID int64
TIME object
SMS float64
CALL float64
INTERNET float64
dtype: object
【问题讨论】:
【参考方案1】:你可以在resample
中使用参数on
:
on:字符串,可选
对于 DataFrame,使用列而不是索引进行重采样。列必须类似于日期时间。 0.19.0 版中的新功能。
df1['TIME'] = pd.to_datetime(df1['TIME'])
df = df1.resample('60min', on='TIME').mean()
print (df)
ID SMS CALL INTERNET
TIME
2013-11-30 23:00:00 1 0.365369 0.136635 12.880614
2013-12-01 00:00:00 1 0.186710 0.092731 12.526637
或者为DatetimeIndex
添加set_index
:
df1['TIME'] = pd.to_datetime(df1['TIME'])
df = df1.set_index('TIME').resample('60min').mean()
【讨论】:
谢谢@jezrael。有用!!但在我的情况下,即使是 ID 列也被平均了。 ID SMS CALL INTERNET TIME 2013-11-30 23:00:00 5000.624339 2.829674 1.239895 62.598992 您可以使用df = df1.drop('ID', axis=1).resample('60min', on='TIME').mean()
或df = df1.drop('ID', axis=1).set_index('TIME').resample('60min').mean()
@Shruti Bothe - 如果我的回答有帮助,请不要忘记 accept 它 - 单击答案旁边的复选标记 (✓
) 将其从灰色切换为已填充。谢谢。
我需要时间作为 df 列而不是索引。我还需要在 df 中出现 ID 列。以上是关于每小时重新采样数据帧的主要内容,如果未能解决你的问题,请参考以下文章
Pandas 将 5 分钟数据重新采样为每小时平均值:日期问题 [重复]