我有一个Pandas数据框架,如下图所示。我想创建一个7天的温度滚动平均值。我知道如何做,如果它是一个读数,每天()。dataset['rolling_temp'] = dataset.iloc[:,3].rolling(window=7).mean()
但问题是每天的读数是随机的,即1天可能是多行。 任何帮助将是非常感激
day temperature
1 1 18.0
2 1 19.0
3 2 18.0
4 3 17.0
5 4 18.5
6 4 19.0
7 5 18.0
8 6 19.0
9 7 18.5
10 8 17.5
11 9 17.0
12 10 18.0
13 11 19.0
14 12 19.5
15 13 16.5
16 13 17.0
不如做一个 .groupby
先做 .rolling
? 这就解决了有多个日子的问题,并给你每天一个值。
dataset = dataset.groupby('day')['temperature'].mean().reset_index().iloc[:,3].rolling(window=7).mean()
如果你把你的天数转换为适当的日期,并把它们做成索引,你应该能够产生滚动的统计数据。你必须包括月和年,所以如果你还没有存储这样的值,就添加额外的列,然后。
dataset['date'] = dataset[['year', 'month', 'day']].apply(lambda row: '{}-{}-{}'.format(row['year'], row['month'], row['day']), axis=1)
dataset.set_index('date', inplace=True')
dataset.temperature.rolling('7D', min_periods=1).mean()
请看下面的参考资料 本页.你也可以尝试重新采样索引。
dataset.temperature.resample('D').rolling('7D', min_periods=1).mean()
请注意,这可能无法与旧版本的pandas工作, 所以,如果你遇到错误,考虑升级到最新的稳定。