繁体   English   中英

使用 pandas 逐行计算列平均值

[英]Calculate column average row by row using pandas

我有以下 pandas DF:

    val
1   10
2   20
3   30
4   40
5   30

我想得到两个 output 列: avgavg_sep

avg应该是逐行计算的平均值。

avg_sep应该是在特定条件之前逐行计算的平均值(即直到第 3 行我计算一个平均值,在第 3 行之前我开始计算另一个平均值),我的预期 output 是:

    val  avg  avg_sep
1   10   10   10
2   20   15   15
3   30   20   20
4   40   25   40
5   30   26   35

我知道我可以使用df.mean(axis=0)来获取列的平均值。 但是我怎样才能得到预期的 output 呢?

从评论中的讨论:

import pandas as pd
import numpy as np

# Building frame:
df = pd.DataFrame(
    data={"val": [10, 20, 30, 40, 30]},
    index=[1, 2, 3, 4, 5]
)

# Solution:
df["avg"] = df["val"].cumsum() / np.arange(1, 6) # or `/ df.index`
df.loc[:3, "avg_sep"] = df.loc[:3, "val"].cumsum() / np.arange(1, 4)
df.loc[4:, "avg_sep"] = df.loc[4:, "val"].cumsum() / np.arange(1, 3)

使用mean() 扩展

df = pd.DataFrame(data=[[10],[20],[30],[40],[30]], columns=["val"])

df["avg"] = df["val"].expanding().mean()

split_at = 3
df["sep_flag"] = pd.concat([df["val"][:split_at,].expanding().mean(), df["val"][split_at:,].expanding().mean()])

[Out]:
   val   avg  sep_flag
0   10  10.0      10.0
1   20  15.0      15.0
2   30  20.0      20.0
3   40  25.0      40.0
4   30  26.0      35.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM