取 DataFrame 列中 n 个数字的平均值和 "drag" 类似于 Excel 的公式

Take the mean of n numbers in a DataFrame column and "drag" formula down similar to Excel

我正在尝试取 pandas DataFrame 列中的 n 个数字的平均值和 "drag" 每行中的公式以获得相应的平均值。

假设有 6 行数据,A 列为 "Numbers",B 列为 "Averages"。我想取 A1:A2 的平均值,然后 "drag" 该公式向下得到 A2:A3、A3:A4 等的平均值

    list = [55,6,77,75,9,127,13]
    finallist = pd.DataFrame(list)
    finallist.columns = ['Numbers']

下面给出了 Numbers 列中 0:2 行的平均值。所以用 .iloc[0:2]) 调出行是可行的,但是当我尝试向下移动一行时它不起作用:

finallist['Average'] = statistics.mean(finallist['Numbers'].iloc[0:2])

下面我尝试取前两行的平均值,然后在向下移动行时向下移动 1,但我得到的值为 NaN:

    finallist['Average'] = statistics.mean(finallist['Numbers'].iloc[0:2].shift(1))

我希望 .iloc[0:2].shift(1)) 将均值函数向下移动 1 行,但仍然适用于总共 2 行,但我得到的值为 NaN

这是我输出的屏幕截图:

在您的 shift(1) 方法中发生的事情是您实际上将数据中的索引 "down" 移动一次,因此此代码:

df['Numbers'].iloc[0:2].shift(1)

产生输出:

0     NaN
1    55.0

然后取这两个的平均值,计算结果为 NaN,然后将这个值分配给此处 Averages 系列的每个元素:

df['Averages'] = statistics.mean(df['Numbers'].iloc[0:2].shift(1))

您可以改为使用 rolling() 结合 mean() 来获得整个数据帧的滑动平均值,如下所示:

import pandas as pd
values = [55,6,77,75,9,127,13]
df = pd.DataFrame(values)
df.columns = ['Numbers']
df['Averages'] = df.rolling(2, min_periods=1).mean()

这会产生以下输出:

    Numbers     Averages
0   55          55.0
1   6           30.5
2   77          41.5
3   75          76.0
4   9           42.0
5   127         68.0
6   13          70.0