我在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对每个单独日期的数据执行某些操作?
答案 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