python - 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
我希望这些组像上面显示的那样重叠。我希望你能理解我的问题并能帮助我。
解决方案
Series.rolling
与center=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)
推荐阅读
- java - 如何创建一个 Java 肥皂服务,它使用不同的肥皂服务作为客户端并返回原始 xml 响应
- html - 图像 srcset 定义未按预期工作
- regex - ansible extrct uid form ldap_search 并用于制作 ldap 过滤器
- sql - 如何在 ssms 中通过 select 插入值?我得到了我尝试过的错误
- qt - 如何将 QAction 设置为在 QToolBar 内具有透明背景
- html - 如果没有空格,移动到下一行
- r - R连接数据表/使用另一张表填充一张表:错误因子级别和双列
- android - 使用数据绑定时,如何将 Activity 的 30 个 EditTexts 的资源 ID 添加到 ArrayList?
- javascript - 为什么猫鼬会改变变量
- amazon-web-services - 用于检查 JSON 密钥的 CloudWatch 指标筛选器是否存在