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

Python中替换DataFrame的x/X值并计算Sum_freq列的实现方案

Python数据处理任务及问题

任务需求

  • 现有两个DataFrame:new_ttt_try(结构如下)和example(结构如下)
  • 将example中的x和X替换为new_ttt_try中对应列索引行的Freq值
  • 添加Sum_freq列,计算每行替换后的频率值总和

new_ttt_try结构

0123True_valuesFreq
ATTFNA20.1
BTTFNA20.1
CNATFNA10.0
DFTFNA10.0

example结构

idABCD
1XXFNA
2xXFNA
3NAxFNA
4xxFNA

尝试的代码

column_mapping = {}
columns = new_ttt_try.columns
for col in example.columns:
   if col in new_ttt_try.index:
       frequency_value = new_ttt_try[new_ttt_try.index==col]['Freq'].values[0]
       column_mapping[col]= frequency_value
for col,frequency_value in column_mapping.items():
#print(type(col))
#example = pd.DataFrame(example)
   if col in example.columns:
       example['cis sub controls'].replace({"X": frequency_value, "x": frequency_value}, inplace=True)

预期输出

idABCDSum_freq
10.10.1FNA0.2
20.10.1FNA0.2
3NA0.1FNA0.1
40.10.1FNA0.2

错误分析与正确实现

错误点

  1. 代码错误操作了不存在的example['cis sub controls']列,未针对目标列(A/B/C/D)进行替换
  2. 替换逻辑未绑定对应列,导致替换规则未生效

正确代码实现

import pandas as pd

# 构建列名与频率的映射字典
freq_map = new_ttt_try['Freq'].to_dict()

# 遍历目标列,替换x/X为对应频率值
for col in ['A', 'B', 'C', 'D']:
    example[col] = example[col].replace({'X': freq_map[col], 'x': freq_map[col]})

# 计算每行频率总和:仅对数值类型元素求和,忽略字符串和缺失值
example['Sum_freq'] = example[['A', 'B', 'C', 'D']].apply(
    lambda row: row[row.apply(lambda x: isinstance(x, (int, float)))].sum(),
    axis=1
)

代码说明

  1. 直接将new_ttt_try的Freq列转为字典,键为列名(A/B/C/D)、值为对应频率,简化映射逻辑
  2. 针对每一列单独替换x/X,确保替换规则绑定到对应列
  3. 求和时过滤非数值类型的元素(如F)和缺失值,保证计算结果准确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:55:28