📜  如何计算 Pandas 的滚动中位数?

📅  最后修改于: 2022-05-13 01:55:46.164000             🧑  作者: Mango

如何计算 Pandas 的滚动中位数?

在本文中,我们将了解如何计算 pandas 中的滚动中位数。

滚动度量通常在时间序列数据中计算。它通过聚合最后“n”次出现的值来表示值如何变化。 “n”被称为窗口大小。聚合通常是平均值或简单平均值。但是,我们也可以使用中值聚合来执行某些类型的分析。

在我们开始之前,让我们使用 pip 安装 panda 的库:

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 条记录的中值。这个窗口大小可以在 window 参数的 rolling() 方法中定义。

Python
# 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)


Python
# 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  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 周 Tata Motors 的股票价格。滚动中位数是针对 7 的窗口大小计算的,这意味着一周的时间范围。因此,w7_roll_median 列中的每个值代表一周的股价中值。由于窗口大小为 7,因此如前所述,最初的 6 条记录是 NaN。

Python

# 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