首页 > 解决方案 > Python Pandas:计算每行每行的中位数(如重叠组)

问题描述

我有一个这样的数据框,但要大得多:

Index    Duration
1        100          
2        300
3        350
4        200
5        500
6        1000
7        350
8        200
9        400

我想为每 3 行计算一个新列,但在每一行中都有中位数。像这样:

Index    Duration     Median
1        100          
2        300          300
3        350          300
4        200          350
5        500          500
6        1000         500
7        350          350
8        200          350
9        400

因此,对于每个中间行,它需要 3 行,从头开始。但它总是必须在自己的前一排和后一排。因此,正在写入中位数的行位于中间。因此,第一行和最后一行必须为空。数据框的其余部分必须保持原样。

这是它在 Excel 中的示例图片:

在此处输入图像描述

在此处输入图像描述

在 Excel 中,这很容易。您可以将公式向下移动。我尝试了许多在这里找到的解决方案,但它们并没有按照我的意愿去做。

例如,我试过这个,但它只让我分成 3 个组,我不想要:

df.groupby(np.arange(len(df))//3).median()

#output:

Index     Duration     Median
1         100          500
2         300          350
3         350          350

我希望这些组像上面显示的那样重叠。我希望你能理解我的问题并能帮助我。

标签: pythonexcelpandasstatistics

解决方案


Series.rollingcenter=True参数一起使用:

df['Median'] = df['Duration'].rolling(3, center=True).median()
print (df)
   Index  Duration  Median
0      1       100     NaN
1      2       300   300.0
2      3       350   300.0
3      4       200   350.0
4      5       500   500.0
5      6      1000   500.0
6      7       350   350.0
7      8       200   350.0
8      9       400     NaN

另一个想法是移动 1 行:

df['Median'] = df['Duration'].rolling(3).median().shift(-1)

推荐阅读