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

如何用df.apply()为频率分布表各列计算中位数并添加新行

实现步骤与代码示例

1. 确认自定义中位数函数的参数适配

假设你已定义的median_函数接收两个Series参数:val(组中值列)和freq(单列频率数据),示例逻辑如下(以你实际实现为准):

def median_(val, freq):
    total = freq.sum()
    cumulative_freq = freq.cumsum()
    median_position = total / 2
    # 定位中位数所在分组
    target_idx = cumulative_freq[cumulative_freq >= median_position].index[0]
    # 返回对应组中值(若需插值计算可调整此处逻辑)
    return val.iloc[target_idx]

2. 定义apply用的列处理函数

编写适配df.apply()的函数,每处理一列频率数据时自动传入组中值列:

def compute_col_median(freq_col):
    # 替换'Xi'为你实际的组中值列名
    return median_(df['Xi'], freq_col)

3. 批量计算频率列的中位数

选择目标频率列(示例为第1到第7列,Python切片左闭右开,故用1:8),调用apply()计算:

# 计算所有目标列的中位数结果
median_results = df.iloc[:, 1:8].apply(compute_col_median)

4. 将结果添加为新行到原DataFrame

推荐用loc直接赋值(适配pandas新版本,替代已弃用的append方法):

# 初始化名为'median'的新行为空值
df.loc['median'] = pd.NA
# 填充计算好的中位数到对应频率列
df.loc['median', df.columns[1:8]] = median_results.values
# 组中值列无需中位数,保持空值即可

注意事项

  • 如果频率列是通过列名而非位置索引确定,直接替换选择列的代码,比如df[['freq_2010', 'freq_2011', ..., 'freq_2016']].apply(compute_col_median)
  • 若median_函数需要额外参数,可使用functools.partial封装后再传入apply
  • 确保频率列无缺失值,或在median_中添加空值处理逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:05:17