如何在Pandas中基于Sample列合并两个DataFrame并实现列转行,使total_reads匹配对应取值
解决Pandas中基于Sample列合并两个DataFrame并转换列到行的问题
这是个典型的宽表转长表再合并的场景,咱们一步步来实现你需要的效果:
步骤1:构造示例DataFrame
首先先把你提供的数据转换成Pandas DataFrame(如果你的数据已经是DataFrame了,这步可以跳过):
import pandas as pd # 第一个DataFrame(包含total_reads的表) df1 = pd.DataFrame({ 'sample': ['ERR4223677', 'ERR4225180', 'ERR4225239', 'ERR4225273', 'ERR4225325', 'ERR4225370', 'ERR4225386', 'ERR4225387'], 'Downsample': ['Down_10', 'Down_50', 'Down_50', 'Down_75', 'Raw_Data', 'Down_25', 'Down_75', 'Raw_Data'], 'Series': ['ERP120397']*8, 'total_reads': [2500121, 12500608, 22190433, 18750912, 25001217, 11095216, 33285650, 44380867] }) # 第二个DataFrame(需要转成行的宽表) df2 = pd.DataFrame({ 'series': ['ERP120397']*7, 'sample': ['ERR4223677', 'ERR4225180', 'ERR4225239', 'ERR4225273', 'ERR4225325', 'ERR4225370', 'ERR4225386'], 'Raw_Data': [762828, 1304291, 1007582, 872706, 1052892, 913854, 1174005], 'Down_75': [666093, 1085140, 857346, 750629, 900727, 771552, 995511], 'Down_50': [534468, 816593, 664345, 592641, 701227, 590478, 767682], 'Down_25': [342070, 467548, 394410, 362647, 420112, 347846, 455647], 'Down_10': [177346, 206039, 180437, 172176, 187159, 159422, 204522] })
步骤2:统一列名并转换宽表为长表
第二个DataFrame的series列名和第一个的Series不一致,先统一;然后用melt函数把宽表转成和第一个表结构匹配的长表:
# 统一列名,确保合并时键一致 df2 = df2.rename(columns={'series': 'Series'}) # 将df2的Downsample类型列转为行,生成和df1匹配的结构 df2_long = df2.melt( id_vars=['Series', 'sample'], # 保留不需要转换的标识符列 value_vars=['Raw_Data', 'Down_75', 'Down_50', 'Down_25', 'Down_10'], # 需要转为行的列 var_name='Downsample', # 新列名:存储原来的Downsample类型 value_name='mapped_reads' # 新列名:存储对应的值(你可以根据实际需求改名) )
步骤3:合并两个DataFrame
现在两个表的结构一致了,直接用merge函数基于sample、Series和Downsample三个键合并,确保total_reads能匹配到正确的对应值:
# 左连接保留df1的所有行,即使df2没有对应数据(比如ERR4225387) merged_df = pd.merge( df1, df2_long, on=['sample', 'Series', 'Downsample'], how='left' ) # 查看合并结果 print(merged_df)
结果说明
合并后的DataFrame会保留df1的所有total_reads数据,同时匹配到df2中对应sample和Downsample类型的数值。对于df2中没有的行(比如ERR4225387),对应的mapped_reads会显示为NaN,你可以根据需求用fillna()填充或者dropna()删除这些行。
内容的提问来源于stack exchange,提问作者spaceghost
相关产品推荐
相关产品推荐

