使用Pandas按重复组和样本名匹配计算两组条件的含量比值
计算条件组间同重复同样本的含量比值解决方案
Hey,我来帮你搞定这个需求!咱们可以通过Pandas的拆分、合并和计算三步来实现你要的比值,具体操作如下:
1. 先拆分两个条件组的数据
首先把原DataFrame拆成条件组1和条件组2的子集,同时给它们的amount列重命名,避免后续合并时列名冲突:
# 提取条件组1的数据,并重命名含量列 cond1 = df[df['condition'] == 1].rename(columns={'amount': 'cond1_amount'}) # 提取条件组2的数据,同理重命名 cond2 = df[df['condition'] == 2].rename(columns={'amount': 'cond2_amount'})
2. 按重复组和样本名匹配合并
接下来用replicate和sample作为匹配键做内连接,这样就能精准把同一重复组、同一样本的两条数据对应到一起:
# 内连接只保留两边都有的配对数据 matched_df = pd.merge(cond1, cond2, on=['replicate', 'sample'], how='inner')
3. 计算比值并整理结果
最后新增一列ratio,用条件组1的含量除以条件组2的含量就搞定了:
matched_df['ratio'] = matched_df['cond1_amount'] / matched_df['cond2_amount'] # 可以选择只展示需要的列,让结果更清晰 result_df = matched_df[['replicate', 'sample', 'cond1_amount', 'cond2_amount', 'ratio']] print(result_df)
完整可运行代码(含测试数据)
如果你还没构造好DataFrame,这里给你带测试数据的完整代码,直接就能跑:
import pandas as pd # 构造你提供的示例数据集 data = { 'condition': [1,1,1,1,2,2,2,2], 'replicate': [1,1,2,2,1,1,2,2], 'sample': ['a1','a2','a1','a2','b99','a2','a1','a2'], 'amount': [5,2,3,1,7,4,3,2] } df = pd.DataFrame(data) # 拆分条件组 cond1 = df[df['condition'] == 1].rename(columns={'amount': 'cond1_amount'}) cond2 = df[df['condition'] == 2].rename(columns={'amount': 'cond2_amount'}) # 匹配合并 matched_df = pd.merge(cond1, cond2, on=['replicate', 'sample'], how='inner') # 计算比值 matched_df['ratio'] = matched_df['cond1_amount'] / matched_df['cond2_amount'] # 输出结果 print("计算结果:") print(matched_df[['replicate', 'sample', 'cond1_amount', 'cond2_amount', 'ratio']])
运行结果
执行后你会得到如下结果:
replicate sample cond1_amount cond2_amount ratio 0 1 a2 2 4 0.5 1 2 a1 3 3 1.0 2 2 a2 1 2 0.5
这里要说明一下:条件组1里重复组1的a1,在条件组2的重复组1里找不到对应样本,所以不会出现在结果里;同理条件组2的b99在条件组1没有匹配项,也被过滤掉了,完全符合你要的“同一重复组且样本名相同”的计算要求。
内容的提问来源于stack exchange,提问作者user3575737
相关产品推荐
相关产品推荐

