<p>运用我在<a href="https://stackoverflow.com/questions/26068021/iterate-over-rows-and-expand-pandas-dataframe">answer here</a>中学到的知识:</p>
<pre><code>df.insert(0, "Gene", df.Pos.apply(lambda pos: pos_to_gene[pos]))
def expand(row):
genes = row['Gene']
s = pd.Series(row['Pos'], index=list(set(genes)))
return s
sdf = df.apply(expand, axis=1).stack()
</code></pre>
<p>退货</p>
<pre><code>0 GENE1 chr1_-_12200
1 GENE1 chr1_-_12600
GENE2 chr1_-_12600
3 GENE3 chr1_-_172800
dtype: object
</code></pre>
<p>非常接近;只缺少其余的数据。你知道吗</p>
<p>现在剩下的就是合并堆叠的数据帧(<code>sdf</code>)和原始数据帧(<code>df</code>)。你知道吗</p>
<pre><code>sdf = sdf.to_frame().reset_index(level=1, drop=False)
sdf.columns = ["Gene", "Pos"]
pd.merge(sdf, df, left_on = 'Pos', right_on = 'Pos')
</code></pre>
<p>就这样!你知道吗</p>
<pre><code> Gene Pos MedialIIvsD LateralIIvsD MedialP02IIvsD \
0 GENE1 chr1_-_12200 0.557431 0.066554 0.738343
1 GENE1 chr1_-_12600 0.737887 0.069167 0.829568
2 GENE2 chr1_-_12600 0.737887 0.069167 0.829568
3 GENE3 chr1_-_172800 0.729035 0.035198 0.866111
MedialP09IIvsD
0 0.029935
1 0.409495
2 0.409495
3 0.385711
</code></pre>
<p>也许有更聪明的方法可以做到这一点。你知道吗</p>