每小时重新采样数据帧

时间:2018-03-18 05:56:40

标签: python

我想通过将值替换为每小时的平均值来重新采样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 个答案:

答案 0 :(得分:2)

您可以在resample中使用参数on

  

on :string,optional

     

对于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

或为set_index添加DatetimeIndex

df1['TIME'] = pd.to_datetime(df1['TIME'])
df = df1.set_index('TIME').resample('60min').mean()