我有一个包含一些键和值的系列,就像:
> first
x 0.167965
y 0.380518
z 0.443677
dtype: float64
有时,我会有另一个结构相同但编号不同的东西,例如:
> second
x 0.242322
y 0.991292
z 0.850728
dtype: float64
我想得到他们的意思。为此,我可以创建一个DataFrame,将它们添加为行,然后获取均值:
> df = pd.DataFrame()
> df = both.append(first, ignore_index=True)
> df = both.append(second, ignore_index=True)
> df
x y z
0 0.167965 0.380518 0.443677
1 0.242322 0.991292 0.850728
> first_second_mean = both.mean()
> first_second_mean
x 0.205144
y 0.685905
z 0.647203
dtype: float64
这很酷,可以正常使用。
我可以做的另一件事是将它们直接添加,然后划分:
> added = first + second
> added
x 0.410287
y 1.371810
z 1.294405
dtype: float64
> first_second_mean = added / 2
> first_second_mean
x 0.205144
y 0.685905
z 0.647203
dtype: float64
如果有第三个,我可以按比例放大:
> third
x 0.252872
y 0.791024
z 0.809272
dtype: float64
如果我对这三个方法都使用DataFrame方法:
> df = pd.DataFrame()
> df = df.append(first, ignore_index=True)
> df = df.append(second, ignore_index=True)
> df = df.append(third, ignore_index=True)
> df
x y z
0 0.167965 0.380518 0.443677
1 0.242322 0.991292 0.850728
2 0.252872 0.791024 0.809272
> df.mean()
x 0.221053
y 0.720945
z 0.701226
dtype: float64
如果我手动添加和划分:
> added = first + second + third
> added
x 0.663159
y 2.162834
z 2.103677
dtype: float64
> added / 3
x 0.221053
y 0.720945
z 0.701226
dtype: float64
那行得通,但是我必须跟踪该系列赛的每个单曲,而我需要的是一种仅使用之前的平均值进行计算的方法,就像这样:
> df = pd.DataFrame()
> df = df.append(first_second_mean, ignore_index=True)
> df = df.append(third, ignore_index=True)
> df
x y z
0 0.205144 0.685905 0.647203
1 0.252872 0.791024 0.809272
> df.mean()
x 0.229008
y 0.738464
z 0.728237
dtype: float64
而且,结果不匹配。如果我尝试手动添加和划分方法:
> added = first_second_mean + third
> added
x 0.458016
y 1.476929
z 1.456474
dtype: float64
> added / 2
x 0.229008
y 0.738464
z 0.728237
dtype: float64
校正所有三个均值:
x 0.221053
y 0.720945
z 0.701226
dtype: float64
这三个平均值均不正确:
x 0.229008
y 0.738464
z 0.728237
dtype: float64
显然,我的数学是错误的。我如何仅使用先前的均值(first_second_mean
和新的序列(third
)来计算正确的均值,就像我已经计算了所有部分的均值(first
一样,直接是second
和third
?
我只想保留均值,并用任何新值更新它们,这可能会发生很多次,而不仅仅是本例中的3次。
答案 0 :(得分:1)
要更新平均值,您必须跟踪到目前为止的平均值。
假设您有一个系列 NY CA TX FL
20200625.0 NaN NaN NaN NaN
20200626.0 NaN NaN NaN NaN
,它是avg
以前项目的平均值,而又是一个新项目N
,那么就做
new
答案 1 :(得分:0)
执行小的sef_def函数
def ave_sum(l):
prev = l[0]
for cur in l[1:]:
prev = (cur + prev)/2
return prev
ave_sum([f,s,t])
Out[242]:
x 0.229008
y 0.738464
z 0.728237
dtype: float64