2015-07-17 8 views
0

У меня есть наборы данных, как показано ниже, и хотите, чтобы вычислить максимальное значение 3 дня скользящей средней и попробовал этот кодкак мы можем дать индекс при вычислении 3 дня скользящей средней

pd.rolling_mean(data['prec'], 3).max() 

этот код дает скользящее среднее, но без даты

 year month day prec 
0  1981  1 1 1.5 
1  1981  1 2 0.0 
2  1981  1 3 0.0 
3  1981  1 4 0.4 
4  1981  1 5 0.0 
5  1981  1 6 1.0 
6  1981  1 7 1.9 
7  1981  1 8 0.6 
8  1981  1 9 3.7 
9  1981  1 10 0.0 
10 1981  1 11 0.0 
11 1981  1 12 0.0 
12 1981  1 13 0.0 
13 1981  1 14 12.2 
14 1981  1 15 1.7 
15 1981  1 16 0.6 
16 1981  1 17 0.9 
17 1981  1 18 0.6 
18 1981  1 19 0.4 
19 1981  1 20 0.2 
20 1981  1 21 1.4 
21 1981  1 22 3.2 
22 1981  1 23 0.0 

формат, который я хочу

year month day prec 
.... ..  ..  ... 

кто может помочь решить эту proble м

ответ

0

Присвоить результат pd.rolling_mean или pd.rolling_max в колонку DataFrame:

import pandas as pd 
df = pd.read_table('data', sep='\s+') 

df['moving average'] = pd.rolling_mean(df['prec'], 3) 
df['max of moving average'] = pd.rolling_max(df['moving average'], 3) 

дает

In [32]: df 
Out[32]: 
    year month day prec moving average max of moving average 
0 1981  1 1 1.5    NaN     NaN 
1 1981  1 2 0.0    NaN     NaN 
2 1981  1 3 0.0 5.000000e-01     NaN 
3 1981  1 4 0.4 1.333333e-01     NaN 
4 1981  1 5 0.0 1.333333e-01    0.500000 
5 1981  1 6 1.0 4.666667e-01    0.466667 
6 1981  1 7 1.9 9.666667e-01    0.966667 
7 1981  1 8 0.6 1.166667e+00    1.166667 
8 1981  1 9 3.7 2.066667e+00    2.066667 
9 1981  1 10 0.0 1.433333e+00    2.066667 
10 1981  1 11 0.0 1.233333e+00    2.066667 
11 1981  1 12 0.0 1.480297e-16    1.433333 
12 1981  1 13 0.0 1.480297e-16    1.233333 
13 1981  1 14 12.2 4.066667e+00    4.066667 
14 1981  1 15 1.7 4.633333e+00    4.633333 
15 1981  1 16 0.6 4.833333e+00    4.833333 
16 1981  1 17 0.9 1.066667e+00    4.833333 
17 1981  1 18 0.6 7.000000e-01    4.833333 
18 1981  1 19 0.4 6.333333e-01    1.066667 
19 1981  1 20 0.2 4.000000e-01    0.700000 
20 1981  1 21 1.4 6.666667e-01    0.666667 
21 1981  1 22 3.2 1.600000e+00    1.600000 
22 1981  1 23 0.0 1.533333e+00    1.600000 
+0

извините, но я не получаю максимальное значение в течение 3 дней в среднем по сегодняшний день может скажите, пожалуйста, как это сделать? – bikuser

+0

Пожалуйста, определите, что вы подразумеваете под «максимальным значением за 3 дня в среднем». Я взял это, чтобы означать (1) найти 3-дневную скользящую среднюю, а затем (2) найти 3-дневный скользящий максимум 3-дневных скользящих средних. Пример с упрощенными числами и ожидаемым результатом будет очень полезен. – unutbu

+0

спасибо, сейчас это работает :) – bikuser