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

基于现有列中位数为DataFrame新增2534列的实现求助

解决方案

首先,我们需要处理除PATID外的所有列,为每一列生成对应的_med列:数值≤该列中位数标记为low,否则标记为high。以下是两种适合新手的实现方式:

方法1:循环处理(逻辑直观)

这种方式步骤清晰,容易理解,适合新手逐步跟进:

# 遍历所有需要处理的列(排除PATID)
for col in df.columns.drop('PATID'):
    # 计算当前列的中位数
    med_value = df[col].median()
    # 生成对应的_med列并赋值
    df[f'{col}_med'] = df[col].apply(lambda x: 'low' if x <= med_value else 'high')
    # 调整列顺序:把_med列放在原列的下一个位置
    col_position = df.columns.get_loc(col)
    df.insert(col_position + 1, f'{col}_med', df.pop(f'{col}_med'))

方法2:批量处理(高效快捷)

如果面对2534列的大数据量,这种向量化操作的速度更快:

import pandas as pd

# 提取所有需要处理的基因列
gene_columns = df.columns.drop('PATID')
# 计算每列的中位数
column_medians = df[gene_columns].median()
# 批量生成所有_med列的结果
med_results = df[gene_columns].le(column_medians).replace({True: 'low', False: 'high'})
# 给结果列添加_med后缀
med_results.columns = [f'{col}_med' for col in gene_columns]
# 构造新的列顺序:原列与对应_med列交替排列
new_column_order = []
for col in gene_columns:
    new_column_order.append(col)
    new_column_order.append(f'{col}_med')
# 合并原数据与结果,调整列顺序
df = pd.concat([df, med_results], axis=1)[['PATID'] + new_column_order]

处理后的数据示例

最终生成的DataFrame结构如下:

PATIDGene1Gene1_medGene2Gene2_medGene3Gene3_med
10015.899low67.87high9.87high
10026.899low60.87low10.87high
10037.899high63.87low8.87low

注意事项

  • 如果数据中存在缺失值,median()方法会自动忽略;若需要处理缺失值,可先使用df.fillna()填充后再执行上述代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:50:38