python - pandas 数据框中有效值(非空行)的移动平均值

标签 python pandas dataframe rolling-average

我有一个像这样的 df:

                    a001         a002         a003         a004         a005  
time_axis                                                                     
2017-02-07            1          NaN          NaN          NaN          NaN   
2017-02-14          NaN          NaN          NaN          NaN          NaN   
2017-03-20          NaN          NaN            2          NaN          NaN   
2017-04-03          NaN            3          NaN          NaN          NaN   
2017-05-15          NaN          NaN          NaN          NaN          NaN   
2017-06-05          NaN          NaN          NaN          NaN          NaN   
2017-07-10          NaN            6          NaN          NaN          NaN   
2017-07-17            4          NaN          NaN          NaN          NaN   
2017-07-24          NaN          NaN          NaN            1          NaN   
2017-08-07          NaN          NaN          NaN          NaN          NaN   
2017-08-14          NaN          NaN          NaN          NaN          NaN   
2017-08-28          NaN          NaN          NaN          NaN            5

我想对前 3 个有效值(不是空行)的每一行进行滚动平均值并保存在另一个 df 中:

                  last_3           
time_axis                                                                     
2017-02-07            1   # still there is only a row          
2017-02-14            1   # only a valid value(in the first row) -> average is the value itself          
2017-03-20          1.5   # average on the previous rows (only 2 rows contain value-> (2+1)/2            
2017-04-03            2   # average on the previous rows with non-NaN values(2017-02-14 excluded) (2+3+1)/3            
2017-05-15            2   # Same reason as the previous row         
2017-06-05            2   # Same reason          
2017-07-10          3.6   # Now the considered values are:2,3,6          
2017-07-17          4.3   # considered values: 4,6,3          
2017-07-24          3.6   # considered values: 1,4,6             
2017-08-07          3.6   # no new values in this row, so again 1,4,6             
2017-08-14          3.6   # same reason            
2017-08-28          3.3   # now the considered values are: 5,1,4       

我试图删除第一个数据框中的空行,然后应用 rollingmean ,但我认为这是错误的方法(df1在我的示例中已经存在):

df2 = df.dropna(how='all')
df1['last_3'] = df2.mean(axis=1).rolling(window=3, min_periods=3).mean()

最佳答案

我认为你需要:

df2 = df.dropna(how='all')
df['last_3'] = df2.mean(axis=1).rolling(window=3, min_periods=1).mean()
df['last_3'] = df['last_3'].ffill()
print (df)
            a001  a002  a003  a004  a005    last_3
2017-02-07   1.0   NaN   NaN   NaN   NaN  1.000000
2017-02-14   NaN   NaN   NaN   NaN   NaN  1.000000
2017-03-20   NaN   NaN   2.0   NaN   NaN  1.500000
2017-04-03   NaN   3.0   NaN   NaN   NaN  2.000000
2017-05-15   NaN   NaN   NaN   NaN   NaN  2.000000
2017-06-05   NaN   NaN   NaN   NaN   NaN  2.000000
2017-07-10   NaN   6.0   NaN   NaN   NaN  3.666667
2017-07-17   4.0   NaN   NaN   NaN   NaN  4.333333
2017-07-24   NaN   NaN   NaN   1.0   NaN  3.666667
2017-08-07   NaN   NaN   NaN   NaN   NaN  3.666667
2017-08-14   NaN   NaN   NaN   NaN   NaN  3.666667
2017-08-28   NaN   NaN   NaN   NaN   5.0  3.333333

关于python - pandas 数据框中有效值(非空行)的移动平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49403610/

相关文章:

Python:函数中的双变量

使用 SecretKeyFactory 生成 secret 时,Java 字节数组到字符串必须等于 python 字节数组字符串

python - 路口2 Pandas 数据框

python - 解析大日志文件

r - 使用 `$` 命名数据框列向量

python - 对数据框中的列进行排序

python - Spacy 实体链接模型的训练时间

python - Pandas dataframe.query 方法语法

python - Six.moves 中的关键错误返回 sys.modules[fullname]

python - 使用 pandas 取消隐藏 Excel 工作表中的列并输出到数据框中