You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame窗口中位数计算的后续问题:保留列与消除警告

解决方案

问题1:消除FutureWarning

原代码里['col1','col2']是隐式转元组的写法,pandas后续版本会弃用这种方式,直接改成列表形式['col1', 'col2']就能解决警告。

问题2:保留col3并按规则取值

要在分组聚合时同时处理数值列和分类列,得用agg()方法给不同列指定对应的聚合逻辑:

  • 对col1、col2:计算中位数median()
  • 对col3:优先取窗口内出现次数最多的众数;如果窗口内各值出现次数相同,取第一个出现的众数(也可以根据需求改成取窗口内第一个/最后一个元素)

修正后的完整代码

import pandas as pd
import numpy as np

def calculate_median_val(df, window):
    # 生成分组键:按指定window行数分组
    group_key = np.arange(len(df)) // window
    # 为各列定义聚合规则
    agg_spec = {
        'col1': 'median',
        'col2': 'median',
        'col3': lambda x: x.mode().iloc[0]  # 取窗口内众数,无唯一众数时取第一个
        # 若允许任意值,可替换成:lambda x: x.iloc[0] 或 lambda x: x.iloc[-1]
    }
    return df.groupby(group_key).agg(agg_spec).reset_index(drop=True)

测试验证

测试window=2的情况

用给定的DataFrame运行calculate_median_val(df, 2),输出和预期完全一致:

col1  col2 col3
0   1.5  12.5    A
1   3.5  22.5    A
2   5.5  32.5    B
3   7.5  42.5    B
4   9.5  52.5    B

测试window=3的情况

假设窗口内出现A,B,B的组合,运行calculate_median_val(df, 3)后,col3会自动取众数B,输出示例:

col1  col2 col3
0   2.0  15.0    A
1   5.0  25.0    B
2   8.0  40.0    B
3  10.0  55.0    B

内容的提问来源于stack exchange,提问作者serdar_bay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 09:47:27