Pandas DataFrame-创建14天移动平均线,但显示前14天数据的简单平均值?

时间:2017-11-16 19:18:06

标签: python pandas loops lambda

我有一个与此类似的pandas数据框。

             score   avg   
 date                      
 1/1/2017        0      0  
 1/2/2017        1    0.5  
 1/3/2017        2      1  
 1/4/2017        3    1.5  
 1/5/2017        4      2  
 1/6/2017        5    2.5  
 1/7/2017        6      3  
 1/8/2017        7    3.5  
 1/9/2017        8      4  
 1/10/2017       9    4.5  
 1/11/2017      10      5  
 1/12/2017      11    5.5  
 1/13/2017      12    7.5  
 1/14/2017      13    6.5  
 1/15/2017      14    7.5  
 1/16/2017      15    8.5  
 1/17/2017      16    9.5  
 1/18/2017      17   10.5  
 1/19/2017      18   11.5  
 1/20/2017      19   12.5  
 1/21/2017      20   13.5  
 1/22/2017      21   14.5  
 1/23/2017      22   15.5  
 1/24/2017      23   16.5  
 1/25/2017      24   17.5  
 1/26/2017      25   18.5  
 1/27/2017      26   19.5  
 1/28/2017      27   20.5  
 1/29/2017      28   21.5  

基本上我希望创建一个14天的滚动平均数据,但不是在前14天显示NaN,而只是显示简单的平均值。例如,第2天的平均值是第1天和第2天的平均值,第10天的平均值是第1-10天的平均值,等等。如何在不必手动创建平均值的情况下进行此操作?谢谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您需要使用的是rolling min_periods=1作为参数:

df['avg2'] = df.rolling(14, min_periods=1)['score'].mean()

输出:

         date  score   avg  avg2
0  2017-01-01      0   0.0   0.0
1  2017-01-02      1   0.5   0.5
2  2017-01-03      2   1.0   1.0
3  2017-01-04      3   1.5   1.5
4  2017-01-05      4   2.0   2.0
5  2017-01-06      5   2.5   2.5
6  2017-01-07      6   3.0   3.0
7  2017-01-08      7   3.5   3.5
8  2017-01-09      8   4.0   4.0
9  2017-01-10      9   4.5   4.5
10 2017-01-11     10   5.0   5.0
11 2017-01-12     11   5.5   5.5
12 2017-01-13     12   7.5   6.0
13 2017-01-14     13   6.5   6.5
14 2017-01-15     14   7.5   7.5
15 2017-01-16     15   8.5   8.5
16 2017-01-17     16   9.5   9.5
17 2017-01-18     17  10.5  10.5
18 2017-01-19     18  11.5  11.5
19 2017-01-20     19  12.5  12.5
20 2017-01-21     20  13.5  13.5
21 2017-01-22     21  14.5  14.5
22 2017-01-23     22  15.5  15.5
23 2017-01-24     23  16.5  16.5
24 2017-01-25     24  17.5  17.5
25 2017-01-26     25  18.5  18.5
26 2017-01-27     26  19.5  19.5
27 2017-01-28     27  20.5  20.5
28 2017-01-29     28  21.5  21.5