取 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
我正在尝试取 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