我正在尝试按索引合并两个panda data.frame,但是我得到一个空的data.frame。
我正在关注此链接Python Dataframes not merging on index
中发布的解决方案但它不起作用
这是我的两个data.frames
>>>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)
但结果是一个空的data.frame
我试图为两个索引设置相同的类型
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
答案 0 :(得分:0)
好的,我会尽力将答案汇总在一起。
1。查找两个数据框中共有的索引:
common_id = set(norm_df.index.values).intersection(set(bed_template_df.index.values))
2。合并数据框上的common_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共同的索引以及它们中的所有列。