如何将新样本DataFrame的fano factor归一化至旧样本对应值?
归一化新样本Fano Factor到旧样本对应值的方法
核心思路是先把两个DataFrame里的同编号样本(A1/A2)关联起来,再基于对应旧样本的值做归一化计算。以下用Python pandas实现,步骤清晰适合初学者:
1. 模拟你的两个DataFrame
先把你给出的数据转换成pandas可处理的格式:
import pandas as pd # 旧样本数据 df_old = pd.DataFrame({ "sample name": ["A1 (old)", "A2 (old)"], "fano factor": [10, 9] }) # 新样本数据 df_new = pd.DataFrame({ "sample name": ["A1 (new)", "A2 (new)"], "fano factor": [9, 7] })
2. 提取统一的样本标识
从带(old)/(new)的样本名里,提取出A1、A2这样的核心编号,方便后续匹配:
# 处理旧样本,去掉"(old)" df_old["sample_id"] = df_old["sample name"].str.replace(r" \(old\)", "", regex=True) # 处理新样本,去掉"(new)" df_new["sample_id"] = df_new["sample name"].str.replace(r" \(new\)", "", regex=True)
3. 合并两个DataFrame
基于sample_id把新旧样本的Fano Factor合并到同一条记录中:
merged_df = pd.merge(df_new, df_old, on="sample_id", suffixes=("_new", "_old"))
合并后的结构如下:
| sample name_new | fano factor_new | sample_id | sample name_old | fano factor_old |
|---|---|---|---|---|
| A1 (new) | 9 | A1 | A1 (old) | 10 |
| A2 (new) | 7 | A2 | A2 (old) | 9 |
4. 计算归一化值
根据需求选择常用的归一化方式:
- 方式1:新样本值 ÷ 旧样本值:得到新样本相对于旧样本的比例
- 方式2:(新样本值 - 旧样本值) ÷ 旧样本值:得到新样本相对旧样本的变化率
代码实现:
# 方式1:比例归一化 merged_df["normalized_fano_ratio"] = merged_df["fano factor_new"] / merged_df["fano factor_old"] # 方式2:变化率归一化 merged_df["normalized_fano_change"] = (merged_df["fano factor_new"] - merged_df["fano factor_old"]) / merged_df["fano factor_old"]
比如A1的归一化比例是0.9(新样本是旧样本的90%),变化率是-0.1(比旧样本低10%),符合你的数据逻辑。
可选:整理结果列
如果只需要关键信息,可以筛选并重命名列:
result_df = merged_df[["sample name_new", "fano factor_new", "normalized_fano_ratio"]] result_df.rename(columns={"sample name_new": "sample name"}, inplace=True)
内容的提问来源于stack exchange,提问作者Tom van Bokhoven
相关产品推荐
相关产品推荐

