【发布时间】:2014-02-28 20:35:24
【问题描述】:
我有一个数据框,我们称之为df1,带有一个MultiIndex(只是一个sn-p,还有更多的列和行)
M1_01 M1_02 M1_03 M1_04 M1_05
Eventloc Exonloc
chr10:52619746-52623793|- 52622648-52622741 0 0 0 0 0
chr19:58859211-58865080|+ 58864686-58864827 0 0 0 0 0
58864686-58864840 0 0 0 0 0
58864744-58864840 0 0 0 0 0
chr19:58863054-58863649|- 58863463-58863550 0 0 0 0 0
还有另一个数据框,让我们使用创意名称df2,就像这样(这些是不同算法的结果,这就是它们具有不同索引的原因)。列是相同的,但在第一个 df 中它们没有排序。
M1_01 M1_02 M1_03 M1_04 M1_05
chr3:53274267:53274364:-@chr3:53271813:53271836:-@chr3:53268999:53269190:- 0.02 NaN NaN NaN NaN
chr2:9002720:9002852:-@chr2:9002401:9002452:-@chr2:9000743:9000894:- 0.04 NaN NaN NaN NaN
chr1:160192441:160192571:-@chr1:160190249:160190481:-@chr1:160188639:160188758:- NaN NaN NaN NaN NaN
chr7:100473194:100473333:+@chr7:100478317:100478390:+@chr7:100478906:100479034:+ NaN NaN NaN NaN NaN
chr11:57182088:57182204:-@chr11:57177408:57177594:-@chr11:57176648:57176771:- NaN NaN NaN NaN NaN
我有这个数据框,让我们再次发挥创造力,称之为df3,它统一了df1和df2的索引:
Eventloc Exonloc
event_id
chr3:53274267:53274364:-@chr3:53271813:53271836:-@chr3:53268999:53269190:- chr3:53269191-53274267|- 53271812-53271836
chr2:9002720:9002852:-@chr2:9002401:9002452:-@chr2:9000743:9000894:- chr2:9000895-9002720|- 9002400-9002452
chr1:160192441:160192571:-@chr1:160190249:160190481:-@chr1:160188639:160188758:- chr1:160188759-160192441|- 160190248-160190481
chr7:100473194:100473333:+@chr7:100478317:100478390:+@chr7:100478906:100479034:+ chr7:100473334-100478906|+ 100478316-100478390
chr4:55124924:55124984:+@chr4:55127262:55127579:+@chr4:55129834:55130094:+ chr4:55124985-55129834|+ 55127261-55127579
我需要对这些结果进行 1:1 比较,所以我尝试了两者
df1.ix[df3.head().values]
和
df1.ix[pd.MultiIndex.from_tuples(df3.head().values.tolist(), names=['Eventloc', 'Exonloc'])]
但他们都给了我 NA 的数据帧。唯一有效的是:
event_id = df2.index[0]
df1.ix[df3.ix[event_id]]
但这显然不是最理想的,因为它没有矢量化并且非常慢。我想我错过了 MultiIndexes 的一些关键概念。
谢谢, 奥尔加
【问题讨论】:
-
你能试试
df1.ix[pd.Index(df3.head().values)]吗?我认为这可能对你有用。 -
不知何故仍然无法正常工作,即使我已经两次和三次检查了 ID。
-
实际上,是的,它有效!我的整个问题是我通过重置另一个数据框的索引创建了
df1,而我只使用了head(),这就是为什么我没有得到任何重叠。
标签: python indexing pandas alignment dataframe