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

如何基于DataFrame不同行值为新列分配匹配来源标签

实现方案

你可以在原有拆分样本编号和后缀的步骤后,新增按「样本前缀编号 + 4个匹配字段」分组统计P1/P2的存在情况,再给C后缀的行赋值对应DERIVE标识即可,完整实现代码如下:

import pandas as pd

a=["003C", "003P1", "003P1", "003P1", "004C", "004P1", "004P2", "003C", "003P2", "003P1", "003C", "003P1", "003P2", "003C", "003P1", "004C", "004P2", "001C", "001P1"]
b=["chr18", "chr20", "chr8", "chr8", "chr11", "chr11", "chr11", "chr11", "chr11", "chr11", "chr1", "chr1", "chr1", "chr1", "chr1", "chr11", "chr11", "chr9", "chr9"]
c=[48399,145653,244695,244695,1163940,1163940,1163940,5986513,5986513,5986513,248650751,248650751,248650751,125895,125895,2587895,2587895,14587952,14587952]
d=["C", "G", "C", "C", "C", "C", "C", "G", "G", "G", "T", "T", "T", "T", "T", "C", "C", "T", "T"]
e=["A", "T", "A", "A", "G", "G", "G", "A", "A", "A", "A", "A", "A", "A", "A", "G", "G", "C", "C"]
# 构造DataFrame
df = pd.DataFrame({'Sample':a, 'CHROM':b, 'POS':c, 'REF':d, 'ALT':e})

# 拆分样本编号和后缀
df[['INT','STR']] = df['Sample'].str.extract(r'(\d+)(.*)')
group_cols = ['INT', 'CHROM', 'POS', 'REF', 'ALT']

# 定义DERIVE的判断逻辑
def get_derive(g):
    str_set = set(g['STR'])
    if 'P1' in str_set and 'P2' in str_set:
        return 'BOTH'
    elif 'P1' in str_set:
        return 'P1'
    elif 'P2' in str_set:
        return 'P2'
    return ''

# 映射DERIVE列,仅C后缀行保留值,其余为空
df['DERIVE'] = df.groupby(group_cols).apply(get_derive).reindex(df.set_index(group_cols).index).values
df.loc[df['STR'] != 'C', 'DERIVE'] = ''

# 原有过滤逻辑
c_filter = ['CHROM', 'POS', 'REF', 'ALT', 'INT']
m  = df['STR'].isin(['C', 'P1', 'P2'])
m1 = df['STR'].eq('C').groupby([*df[c_filter].values.T]).transform('any')
m2 = df['STR'].mask(~m).groupby([*df[c_filter].values.T]).transform('nunique').ge(2)

# 排序输出,删除临时列
df = df[m & m1 & m2].sort_values('POS', ignore_index=True).drop(['INT', 'STR'], axis=1)
print(df)

运行上述代码输出结果与你给出的预期完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:48:04