python - 使用 Pandas 计算累积平均值

标签 python pandas

我有一个如下的数据框。

Name  2001 2002 2003 2004 2005 2006  
Name1  2    5     0    0    4    6  
Name2  1    4     2    0    4    0  
Name3  0    5     0    0    0    2  

我想使用 pandas 计算每行的累积平均值,但是在计算平均值时它必须忽略该值是否为零。

预期输出如下。

Name  2001  2002  2003  2004  2005  2006  
Name1  2    3.5    3.5  3.5   3.75  4.875  
Name2  1    2.5   2.25  2.25  3.125 3.125  
Name3  0     5     5     5    5     3.5  

最佳答案

首先,根据您的评论,我认为您的计算中也存在数学问题。 如果在第一行中,您取 3.5(即您所说的当前累积值)加上 4(第一行中 2005 年的值)并给出 --> (3.5+4)/2= 3.75,则出现错误后来在第 2 行第 2 列 2005 年。 事实上,有 (2.25 + 4)/2 = 3.125。你写的是3.175。

现在我相信有更好的方法来实现我的解决方案,但我在这里得到了您所需要的。

def cumulative_av(x):
    b=[]
    b.append(x[0])
    for i in range(1,len(x)):
        if(x[i]!=0 and b[-1]!=0):
            b.append((x[i]+b[-1])*0.5)
        elif(x[i]!=0 and b[-1]==0):
            b.append(x[i])
        elif(x[i]==0 and b[-1]!=0):
            b.append(b[-1])
        elif(x[i]==0 and b[-1]==0):
            b.append(0)

    return(b)


apd2=pd.DataFrame(columns=["2001", "2002", "2003", "2004", "2005", "2006"])
for i in range(3):
    apd2.loc[i]=cumulative_av(apd.loc[i,].to_list())

其中“apd”是您最初的 pandas 数据框。 cumulative_av是一个生成您定义的函数(在我看来这是一个非常奇怪的函数)。

这是我的代码的结果:

    2001    2002    2003    2004    2005    2006
0   2.0     3.5     3.50    3.50    3.750   4.875
1   1.0     2.5     2.25    2.25    3.125   3.125
2   0.0     5.0     5.00    5.00    5.000   3.500

关于python - 使用 Pandas 计算累积平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59927483/

相关文章:

python - 将文本文件的特定列读入列表(python 3.6.3)

python - 在函数内部或外部循环?

python-3.x - 将 Pandas Dataframe 写入到_csv StringIO 而不是文件

python - 如何从matplotlib条形图中获取数据

python - 概括二维数组中的沙漏运动 - Python 中的 DS

python - 返回多个值的 cdef 函数的 Cython 异常传播

python - 如何使用非分隔符 Pandas 将索引拆分为多索引

python - 删除 pandas df 中的列表字符串开头

python - 拆分数字和单词 pandas 保留索引

python - 如何从其他指定列替换 DataFrame 的元素