熊猫一天一天

时间:2015-08-22 17:41:05

标签: python datetime pandas dataframe time-series

我在Pandas数据框中有很多数据:

Timestamp                 Value     
2015-07-15 07:16:39.034  49.960 
2015-07-15 07:16:39.036  49.940 
......
2015-08-12 23:16:39.235  42.958  

我每天约有50 000个条目,我希望每天对这些数据执行不同的操作。

例如,如果我想找到滚动的意思,我会输入:

 df['rm5000'] = pd.rolling_mean(df['Value'], window=5000)

但这会让我在各个日期之间滚动。 8月12日的第一个滚动平均数据点将包含8月11日的4999数据点。但是,我想每天都开始,因为每天的前4999个数据点不包含5000的滚动平均值,因为最后一个数据与第一个数据之间可能存在很大差异第二天的数据。

对于每个日期,我是否必须将数据分割为单独的数据帧,以便Pandas对每个单独日期的数据执行某些操作?

1 个答案:

答案 0 :(得分:2)

如果您将时间戳设置为索引,则可以groupby TimeGrouper使用频率代码按天划分数据,如下所示

In [2]: df = pd.DataFrame({'Timestamp': pd.date_range('2015-07-15', '2015-07-18', freq='10min'), 
                           'Value': np.linspace(49, 51, 433)})

In [3]: df = df.set_index('Timestamp')

In [4]: df.groupby(pd.TimeGrouper('D'))['Value'].apply(lambda x: pd.rolling_mean(x, window=15))

Out[4]: 
Timestamp
2015-07-15 00:00:00          NaN
2015-07-15 00:10:00          NaN
.....
2015-07-15 23:30:00    49.620370
2015-07-15 23:40:00    49.625000
2015-07-15 23:50:00    49.629630
2015-07-16 00:00:00          NaN
2015-07-16 00:10:00          NaN