在python上尝试按索引合并时出错

2024-05-13 02:15:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试合并两只熊猫数据帧但我得到一个空的数据框. 你知道吗

我正在关注这个链接中发布的解决方案Python Dataframes not merging on index

但它不起作用

这是我的两个数据帧你知道吗

>>>norm_df.head()
                    eQTL-103  eQTL-105  eQTL-106  eQTL-111  eQTL-112  \
transcript_id                                                          
ENST00000456328.2  -0.418029 -0.418029 -0.418029 -0.418029  0.733977   
ENST00000488147.1   0.330873 -1.786156  0.562062  0.023212  0.380326   
ENST00000466430.5   1.128144 -1.914506 -0.589456 -0.430727 -0.796183   
ENST00000442987.3   1.446104 -0.508488  0.895780  0.306454  0.828465   
ENST00000494149.2   0.674490 -1.085325 -0.828465  0.116309 -0.186756   

                    eQTL-115  eQTL-126  eQTL-127  eQTL-131  eQTL-133  \
transcript_id                                                          
ENST00000456328.2   1.786156 -0.418029  1.382994 -0.418029  0.861634   
ENST00000488147.1   1.005170 -1.044409 -1.515564  1.324958  0.000000   
ENST00000466430.5   0.282216 -1.593219  0.828465  0.589456  0.430727   
ENST00000442987.3  -0.931003  0.258143  0.535083  1.786156 -0.210428   
ENST00000494149.2  -0.562062  0.306454 -0.861634  0.282216  0.430727     

                   eQTL-80   eQTL-85   eQTL-87   eQTL-94   eQTL-96   eQTL-97  
transcript_id                                                                   
ENST00000456328.2  -0.418029 -0.418029  1.005170 -0.418029 -0.418029 -0.418029  
ENST00000488147.1  -0.967422 -0.482248 -0.764710  0.895780  0.116309 -0.931003  
ENST00000466430.5   0.508488  0.023212 -0.931003 -0.562062  0.861634 -1.382994  
ENST00000442987.3  -1.914506  0.380326 -0.482248 -0.116309  0.674490 -1.005170  
ENST00000494149.2  -1.515564 -0.430727 -0.023212  0.617300  0.186756 -0.046436  

[5 rows x 107 columns]

>>> bed_template_df.head()

                    chr  start    end      transcript_id
transcript_id                                           
ENST00000456328.2  chr1  11868  11869  ENST00000456328.2
ENST00000450305.2  chr1  12009  12010  ENST00000450305.2
ENST00000488147.1  chr1  29569  29570  ENST00000488147.1
ENST00000619216.1  chr1  17435  17436  ENST00000619216.1
ENST00000473358.1  chr1  29553  29554  ENST00000473358.1

我试过pd.merge

 bed_df = pd.merge(bed_template_df, norm_df, left_index=True, right_index=True)

但结果却是一片空白数据框你知道吗

我尝试为两个索引设置相同的类型

 norm_df.index = norm_df.index.astype(str)
 bed_template_df.index = bed_template_df.index(str)

但是它不起作用,当我在merge命令中指定how时,我得到了这个结果

>>> bed_df = pd.merge(bed_template_df, norm_df, left_index=True, right_index=True, how='right')

>>> bed_df.head()
                    chr  start  end transcript_id  eQTL-103  eQTL-105  
transcript_id                                                           
ENST00000456328.2   NaN    NaN  NaN           NaN -0.418029 -0.418029   
ENST00000488147.1   NaN    NaN  NaN           NaN  0.330873 -1.786156   
ENST00000466430.5   NaN    NaN  NaN           NaN  1.128144 -1.914506   
ENST00000442987.3   NaN    NaN  NaN           NaN  1.446104 -0.508488   
ENST00000494149.2   NaN    NaN  NaN           NaN  0.674490 -1.085325

看起来python没有发现这两个索引相等,但是我可以看到ENST00000456328.2中的bed_template_df存在于norm_df


Tags: 数据idtruenormdfindextemplatemerge
1条回答
网友
1楼 · 发布于 2024-05-13 02:15:25

好吧,我试着把答案拼起来。你知道吗

1.查找两个数据帧中的共同标记:

common_id = set(norm_df.index.values).intersection(set(bed_template_df.index.values))

2.合并公共\u id上的数据帧:

final_df = pd.merge(bed_template_df[common_id], norm_df[common_id], left_index=True, right_index=True)

如果我没听错的话,这应该管用。它提供了一个最终的数据帧,其中只包含norm_df和bed_template_df的共同标记,以及它们中的所有列。你知道吗

相关问题 更多 >