【发布时间】:2020-10-17 13:12:46
【问题描述】:
我有一个包含一些键和值的系列,就像:
> 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 和 @987654336 @) 直接?
我只想保留平均值,并在新值出现时对其进行更新,这可能会发生很多次,而不仅仅是本例中的 3 次。
【问题讨论】:
-
(first_second_mean * 2 + third) / 3? -
@ScootCork 谢谢。正好有 3 个项目可以解决问题。对于 n 项,我相信 Elliott Collins 的答案可能是解决此问题的最佳方法。不过,我认为两者在数学上基本相同。
标签: python pandas math mean series