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

如何在DataFrame中查找指定rs_id对应的最高频率组合

找出指定rs_id的最高频率基因型组合方案

嘿,我来帮你搞定这个问题!针对你那2000行10列的DataFrame,要找出rs_id为0、1、2时的最高频率基因型组合(比如A.Ag、B.Bg、C.Ag这类组合),用pandas就能轻松实现,具体步骤如下:

1. 先筛选目标rs_id的数据

首先我们把范围缩小到rs_id等于0、1、2的行,避免处理无关数据:

import pandas as pd

# 假设你的DataFrame名为df,rs_id列的列名是'rs_id'
target_rs_ids = [0, 1, 2]
filtered_data = df[df['rs_id'].isin(target_rs_ids)]

2. 分组统计最高频率组合

接下来我们按rs_id分组,对每组内的基因型列(比如你提到的A、B、C列)的组合进行频率统计,找出每组中出现次数最多的组合:

# 定义函数:传入一个分组,返回该组的最高频率组合及对应次数
def find_top_combination(group):
    # 将A、B、C列的内容用'.'连接成一个组合字符串,然后统计每个组合的出现次数
    combo_counts = group[['A', 'B', 'C']].agg('.'.join, axis=1).value_counts()
    # 获取频率最高的组合和对应的次数
    top_combo = combo_counts.idxmax()
    top_freq = combo_counts.max()
    return pd.Series({'最高频率组合': top_combo, '出现次数': top_freq})

# 按rs_id分组应用函数,得到结果
result_df = filtered_data.groupby('rs_id').apply(find_top_combination).reset_index()

3. 查看最终结果

运行完上面的代码后,result_df就是你要的结果啦,它会展示每个目标rs_id对应的最高频率组合和出现次数,示例输出大概是这样:

rs_id最高频率组合出现次数
0A.Ag.B.Bg.C.Ag168
1A.Aa.B.Bb.C.Aa142
2A.Ag.B.Ba.C.Ab175

一些补充说明

  • 请记得把代码里的['A', 'B', 'C']替换成你DataFrame中实际存储基因型的列名哦。
  • 如果你的组合分隔符不是.,可以修改agg('.'.join, axis=1)里的分隔符,比如改成'_'或者其他你需要的符号。
  • 如果有多个组合频率相同且都是最高的,上面的函数只会返回第一个出现的组合。如果你需要获取所有最高频率的组合,可以用下面这个修改版的函数:
def find_all_top_combinations(group):
    combo_counts = group[['A', 'B', 'C']].agg('.'.join, axis=1).value_counts()
    max_frequency = combo_counts.max()
    # 筛选出所有频率等于最大值的组合
    all_top_combos = combo_counts[combo_counts == max_frequency].index.tolist()
    return pd.Series({'所有最高频率组合': all_top_combos, '出现次数': max_frequency})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:42:22