Pandas 一天一天
Pandas day for day
我在 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 对每个单独日期的数据执行某些操作?
如果将时间戳设置为索引,则可以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
我在 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 对每个单独日期的数据执行某些操作?
如果将时间戳设置为索引,则可以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