【发布时间】:2014-11-07 02:41:20
【问题描述】:
我有一个具有三个级别的多索引的 DataFrame,例如:
COL1 COL2 ...
CHROM POS LABEL
chr1 43 strA ... ... ...
strB ... ... ...
66 strC ... ... ...
strB ... ... ...
chr2 29 strD ... ... ...
... ... ... ... ... ...
还有一个带有多索引的系列,其中前两个级别的 DataFrame 索引:
VAL
CHROM POS
chr1 43 v1
66 v2
chr2 29 v3
... ... ...
我想在 DataFrame 中添加一个带有 Series 的列,为前两个级别匹配的每个索引重复值 v1、v2...,如下所示:
COL1 COL2 NEW ...
CHROM POS LABEL
chr1 43 strA ... ... v1 ...
strB ... ... v1 ...
66 strC ... ... v2 ...
strB ... ... v2 ...
chr2 29 strD ... ... v3 ...
... ... ... ... ... ... ...
注意Series没有缺失的行,即DataFrame中的所有(CHROM,POS)也在Series中。 我有一个可行的解决方案:
pandas.Series(variant_db.index.map(lambda i: cov_per_sample[sample].loc[i[:2]]), index=variant_db.index)
但是,由于那个 lambda,它对于大数据(数十万行)来说非常慢。 我尝试了更快:
df['NEW'] = s.reindex(df.index, method='ffill')
但是这样在df['NEW']中有很多NaN,这不应该发生。使用 method='bfill' 我在不同的位置得到了 NaN,但是在这两种情况下,有些行都得到了 NaN,所以即使使用两者也不起作用。
为了提高效率,我想要一种仅使用库函数的方法。 有人可以帮忙吗?
【问题讨论】: