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

基于参考碱基条件对数据集指定列分组求和的技术问询

数据集处理:按ref值规则计算A、B列求和结果

我把你的需求拆解成了原始数据展示、求和规则明确、处理结果输出,还加了自动化处理的代码实现,方便你直接复用:

原始数据集

先把你提供的原始数据转成更易读的Markdown表格:

scafposrefA-1A-2A-3A-4B-1B-2B-3B-4
MT111722A330000111000
MT111723T02300801802
MT111724A22226056800

明确求和规则

根据ref列的不同取值,对A、B系列列执行对应的求和逻辑:

  • 当ref = A:
    • A列 = A-2 + A-3 + A-4
    • B列 = B-2 + B-3 + B-4
  • 当ref = T:
    • A列 = A-1 + A-3 + A-4
    • B列 = B-1 + B-3 + B-4
  • 当ref = C:
    • A列 = A-1 + A-2 + A-4
    • B列 = B-1 + B-2 + B-4
  • 当ref = G:
    • A列 = A-1 + A-2 + A-3
    • B列 = B-1 + B-2 + B-3

处理后的结果集

按照规则计算后,得到的目标结果如下:

scafposrefAB
MT111722A00
MT111723T82
MT111724A88

自动化处理代码(Python Pandas)

如果你的数据集很大,手动计算效率太低,用Pandas可以快速实现批量处理,代码如下:

import pandas as pd

# 构造原始数据(如果是从文件读取,用pd.read_csv()即可)
data = {
    'scaf': ['MT1', 'MT1', 'MT1'],
    'pos': [11722, 11723, 11724],
    'ref': ['A', 'T', 'A'],
    'A-1': [330, 0, 222],
    'A-2': [0, 230, 2],
    'A-3': [0, 0, 6],
    'A-4': [0, 8, 0],
    'B-1': [111, 0, 56],
    'B-2': [0, 18, 8],
    'B-3': [0, 0, 0],
    'B-4': [0, 2, 0]
}
df = pd.DataFrame(data)

# 定义每行的求和逻辑
def compute_ab_sum(row):
    ref_val = row['ref']
    # 计算A列的值
    if ref_val == 'A':
        a_total = row['A-2'] + row['A-3'] + row['A-4']
    elif ref_val == 'T':
        a_total = row['A-1'] + row['A-3'] + row['A-4']
    elif ref_val == 'C':
        a_total = row['A-1'] + row['A-2'] + row['A-4']
    elif ref_val == 'G':
        a_total = row['A-1'] + row['A-2'] + row['A-3']
    else:
        a_total = 0  # 应对未知ref值的情况
    
    # 计算B列的值,规则和A列一致
    if ref_val == 'A':
        b_total = row['B-2'] + row['B-3'] + row['B-4']
    elif ref_val == 'T':
        b_total = row['B-1'] + row['B-3'] + row['B-4']
    elif ref_val == 'C':
        b_total = row['B-1'] + row['B-2'] + row['B-4']
    elif ref_val == 'G':
        b_total = row['B-1'] + row['B-2'] + row['B-3']
    else:
        b_total = 0
    
    return pd.Series([a_total, b_total], index=['A', 'B'])

# 应用函数并生成结果
result_df = df[['scaf', 'pos', 'ref']].join(df.apply(compute_ab_sum, axis=1))

print(result_df)

运行这段代码后,就能直接得到上面的结果集,后续如果有更多行数据,只需要替换原始数据部分即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:32:55