You need to enable JavaScript to run this app. R语言:基于dataframe中位数行新增计算列的方法
优惠活动
大模型
产品
解决方案
定价
更多

R语言:基于dataframe中位数行新增计算列的方法

实现思路与可运行代码

不需要纠结“先复制列再修改”还是“直接新增列”,两种方式结果完全一致,核心卡点是如何精准拿到每列对应的中位数做除数,避免列值和除数错配。

分步操作

  1. 提取中位数行的对应数值
    你的DataFrame用国家名、Medians作为行索引,直接通过索引标签取出中位数行即可,取出的结果会和原DataFrame的列一一对应,做除法时自动按列匹配,不会出现GDP列错用人均值当除数的问题:
    # 取出每列对应的中位数,返回结果是和列名严格对齐的Series
    medians = df1.loc["Medians"]
    
  2. 批量生成带_1后缀的计算列
    直接逐列计算原值和对应中位数的商,赋值给新列就行,没必要提前复制原列——提前复制反而会多占一份内存,完全多余:
    # 遍历需要处理的原列,生成对应的新列
    for ori_col in ["GDP", "per_capita"]:
        df1[f"{ori_col}_1"] = df1[ori_col] / medians[ori_col]
        # 要是需要整数结果,加一行类型转换即可
        df1[f"{ori_col}_1"] = df1[f"{ori_col}_1"].astype(int)
    

结果验证

运行完代码后得到的DataFrame和你预期的最终效果完全一致:

GDP  per_capita  GDP_1  per_capita_1
France           2           3      1             1
Spain            2           3      1             1
Ethiopia         4           9      2             3
Medians          2           3      1             1

实操注意点

  • 取中位数的时候优先用索引标签loc['Medians'],别用按位置取最后一行的iloc[-1],如果后续数据行顺序调整,按位置取数很容易错配
  • 中间类似2/2的字符串形式不需要刻意存储,那只是计算过程的示意,最终直接存数值结果即可
  • 后续要是新增更多带数值的列,只要把列名加入遍历的列表,就能自动生成对应的归一化列,不用重复写除法逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.12 04:27:03