如何基于Pandas行中多列条件处理Pharmas与Nutras列数据
Pandas DataFrame 条件修改列值解决方案
原始数据
import pandas as pd # 构造原始DataFrame df = pd.DataFrame( { 'score': [0.0, 1.0], 'firstyearrisk': ['-', '1.0'], 'allfuture': ['-', '1.0'], 'Pharmas': ['Risperidone[9]', 'Risperidone[9]'], 'Nutras': ['Risperidone[9]', '-'] }, index=['ANK2', 'CCL4'] )
原始输出:
score firstyearrisk allfuture Pharmas Nutras Gene ANK2 0.0 - - Risperidone[9] Risperidone[9] CCL4 1.0 1.0 1.0 Risperidone[9] -
处理逻辑与代码
核心思路:先将指定列中的"-"转为0计算行总和,再根据总和为0的条件批量修改目标列值:
# 复制原数据,避免修改原始内容 df_processed = df.copy() # 定义需要计算总和的列 target_sum_cols = ['score', 'firstyearrisk', 'allfuture'] # 将目标列的"-"替换为0,转换为数值类型后计算每行总和 row_sum = df[target_sum_cols].replace('-', 0).astype(float).sum(axis=1) # 筛选总和为0的行,将Pharmas和Nutras列设为"-" df_processed.loc[row_sum == 0, ['Pharmas', 'Nutras']] = '-'
处理后结果
print(df_processed)
输出:
score firstyearrisk allfuture Pharmas Nutras Gene ANK2 0.0 - - - - CCL4 1.0 1.0 1.0 Risperidone[9] -
关键说明
- 使用
replace('-', 0)统一处理非数值标记,确保求和逻辑正确 - 用
astype(float)转换列类型,避免字符串求和的错误 - 通过
loc精准定位符合条件的行,批量修改目标列,效率更高
内容的提问来源于stack exchange,提问作者Michael Schmitz
相关产品推荐
相关产品推荐

