如何在Pandas中计算滚动中位数
在这篇文章中,我们将看到如何在pandas中计算滚动中位数。
滚动指标通常在时间序列数据中计算。它通过对最后 “n “次出现的数值进行汇总来表示数值是如何变化的。n “被称为窗口大小。聚合值通常是平均值或简单平均值。然而,我们也可以使用中位数聚合来进行某些类型的分析。
在我们行动之前,让我们用pip安装Pandas的库:
pip install pandas
pandas.core.window.rolling.Rolling.median()函数计算了滚动中值。对象pandas.core.window.rolling.Rolling是通过对数据帧或序列应用rolling()方法得到的。
示例 1:
在这个例子中,我们将使用pandas.core.window.rolling.Rolling.median()函数来计算给定数据帧的滚动中值。我们已经计算了窗口大小为1、2、3和4的滚动中值。我们将所有这些不同的窗口输出合并到原始数据框中,以便我们可以对它们进行比较。我们可以在输出中观察到,对于窗口大小为’n’的记录,我们将前n-1列作为NaN值。对于第5条记录,将考虑记录2-5的中值。同样,对于第10条记录,将考虑7-10之间的记录的中值。这个窗口大小可以在rolling()方法的窗口参数中定义。
# Import the `pandas` library
import pandas as pd
# Create the pandas dataframe
df = pd.DataFrame({
"value": [101, 94, 112, 100, 134, 124,
119, 127, 143, 128, 141]
})
# Calculate the rolling median for window = 1
w1_roll_median = df.rolling(window=1).median()
# Calculate the rolling median for window = 2
w2_roll_median = df.rolling(window=2).median()
# Calculate the rolling median for window = 3
w3_roll_median = df.rolling(window=3).median()
# Calculate the rolling median for window = 4
w4_roll_median = df.rolling(window=4).median()
# Add the rolling median series to the original
# dataframe for comparison
df['w1_roll_median'] = w1_roll_median
df['w2_roll_median'] = w2_roll_median
df['w3_roll_median'] = w3_roll_median
df['w4_roll_median'] = w4_roll_median
# Print the dataframe
print(df)
输出:
value w1_roll_median w2_roll_median w3_roll_median w4_roll_median
0 101 101.0 NaN NaN NaN
1 94 94.0 97.5 NaN NaN
2 112 112.0 103.0 101.0 NaN
3 100 100.0 106.0 100.0 100.5
4 134 134.0 117.0 112.0 106.0
5 124 124.0 129.0 124.0 118.0
6 119 119.0 121.5 124.0 121.5
7 127 127.0 123.0 124.0 125.5
8 143 143.0 135.0 127.0 125.5
9 128 128.0 135.5 128.0 127.5
10 141 141.0 134.5 141.0 134.5
示例 2:
在这个例子中,我们采取了塔塔汽车过去3周的股票价格。计算滚动中位数的窗口大小为7,也就是一周的时间范围。因此,w7_roll_median列中的每个值都代表一周的股价中值。由于窗口大小是7,如前所述,最初的6条记录是NaN。
# Import the `pandas` library
import pandas as pd
# Create the pandas dataframe
df = pd.DataFrame({
"value": [
506.40, 487.85, 484.90, 489.70, 501.40, 509.65, 510.75,
503.45, 507.05, 505.45, 519.05, 530.15, 509.70, 486.10,
495.50, 488.65, 492.75, 460.20, 461.45, 458.60, 475.25,
]
})
# Calculate the rolling median for window = 7
w7_roll_median = df.rolling(window=7).median()
# Add the rolling median series to the original
# dataframe for comparison
df['w7_roll_median'] = w7_roll_median
# Print the dataframe
print(df)
输出:
value w7_roll_median
0 506.40 NaN
1 487.85 NaN
2 484.90 NaN
3 489.70 NaN
4 501.40 NaN
5 509.65 NaN
6 510.75 501.40
7 503.45 501.40
8 507.05 503.45
9 505.45 505.45
10 519.05 507.05
11 530.15 509.65
12 509.70 509.70
13 486.10 507.05
14 495.50 507.05
15 488.65 505.45
16 492.75 495.50
17 460.20 492.75
18 461.45 488.65
19 458.60 486.10
20 475.25 475.25