<p>您可以使用@jezrael的解决方案,也可以这样做(非常类似):</p>
<pre><code>In [136]: df
Out[136]:
chemicals prots scores
0 CID000000006 10116.ENSRNOP00000003921 196
1 CID000000051 10116.ENSRNOP00000003921 246
2 CID000000085 10116.ENSRNOP00000003921 196
3 CID000000119 10116.ENSRNOP00000003921 247
4 CID000000134 10116.ENSRNOP00000008952 159
5 CID000000135 10116.ENSRNOP00000008952 157
6 CID000000174 10116.ENSRNOP00000008952 439
7 CID000000175 10116.ENSRNOP00000001021 858
8 CID000000177 10116.ENSRNOP00000004027 760
</code></pre>
<p>准备好正确的订单</p>
^{pr2}$
<p>准备排序列的列表(对于旧版本的panda)使用<code>.sort()</code>而不是{<cd2>}:</p>
<pre><code>In [170]: cols = df.groupby('prots').sum().sort_values(by='scores', ascending=False).index
In [171]: cols
Out[171]:
Index(['10116.ENSRNOP00000003921', '10116.ENSRNOP00000001021',
'10116.ENSRNOP00000004027', '10116.ENSRNOP00000008952'],
dtype='object', name='prots')
</code></pre>
<p>以正确的顺序透视和设置列:</p>
<pre><code>In [175]: df_rat1 = df.pivot(index='chemicals', columns='prots', values='scores').fillna('')
In [176]: df_rat1 = df_rat1[cols]
In [177]: df_rat1
Out[177]:
prots 10116.ENSRNOP00000003921 10116.ENSRNOP00000001021 10116.ENSRNOP00000004027 10116.ENSRNOP00000008952
chemicals
CID000000006 196
CID000000051 246
CID000000085 196
CID000000119 247
CID000000134 159
CID000000135 157
CID000000174 439
CID000000175 858
CID000000177 760
</code></pre>