Python 使用pandas dataframe基于多个文件中的三列进行合并
我想使用Python 使用pandas dataframe基于多个文件中的三列进行合并,python,dataframe,merge,Python,Dataframe,Merge,我想使用pd.merge合并近10个文件每个文件都有类似这样的数据 chrom start end name score strand splice_site acceptors_skipped exons_skipped donors_skipped anchor known_donor known_acceptor known_junction genes transcripts 4 3487839 3491240 JUNC00148541
pd.merge
合并近10个文件每个文件都有类似这样的数据
chrom start end name score strand splice_site acceptors_skipped exons_skipped donors_skipped anchor known_donor known_acceptor known_junction genes transcripts
4 3487839 3491240 JUNC00148541 101 - GT-AG 2 1 3 DA 1 1 1 Tmem68 ENSMUST00000029891,ENSMUST00000108388,ENSMUST00000154922
4 3489293 3491240 JUNC00148543 1 - GT-AG 1 0 1 DA 1 1 1 Tmem68 ENSMUST00000029891,ENSMUST00000108388,ENSMUST00000154922
我在过去使用过merge,使用的是pd.merge(df_a,df_b,on='gene',how='outer')
只传递一列,这里我希望根据色度、起点和终点以及链来合并它们
我的新df看起来像
chrm:start-end(strand) score_file1 score_file2 ...file10 gene_name splice_site acceptores exon_skipped donors_skipped...transcripts
如果没有匹配的how='outer'
,我猜将输入一个NaN值。用更少的内存来实现这一点,最好的方法是什么
path = r'/Users/PycharmProjects/'
all_files = glob.glob(os.path.join(path, "*_bed.txt"))
print(all_files)
df1 = pd.read_table(all_files[0])
df2= pd.read_table(all_files[1])
concatnated_df = pd.merge(df1,df2, on=['genes','chrom','start','end'], how='outer')
print(concatnated_df.head(n=5))
感谢您的帮助
最新简化问题:
chr start end score strand gene
1 20 30 50 - abc1
2 40 50 50 + cdf1
10个包含此类数据的csv文件,根据chr、开始-结束和基因进行合并(精确匹配)
新df
您可以将这些列作为列表传递:pd.merge(df_a,df_b,on=['gene','chrom','start'],how='outer'),我想这是有效的,但问题是它还附加了整个标题染色体起始端名称x分数x链拼接位点x受体跳过x外显子跳过x供体跳过x锚定已知供体已知受体已知连接基因转录本x名称y链拼接位点y受体跳过y外显子跳过y供体已知连接转录本有更好的方法吗?对不起,我可能不完全理解这个问题。。。你打算如何处理最终结果?连接(联合)然后分组可能是一个更好的选择hi谢谢你的回答,我已经更新了我的问题,很抱歉混淆尝试了上面的代码无法从每个df中附加列我刚刚得到4列带有chrom genes起始-结束分数的列
chr start end score_file1 score_file2..file10 strand gene
1 20 30 50 20 40 - abc1
2 40 50 50 30 50 + cdf1
dfs = [df1[['chr','gene','start','end','score']],
df2[['chr','gene','start','end','score']],
df3[['chr','gene','start','end','score']],
df10[['chr','gene','start','end','score']]]
df_final = reduce(lambda left,right: pd.merge(left,right,on=
['gene','chr','start','end'], how='outer'),dfs)