Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用pandas dataframe基于多个文件中的三列进行合并_Python_Dataframe_Merge - Fatal编程技术网

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)