擅长:python、mysql、java
<p>您可以使用<code>groupby().cumcount()</code>分配相对排名,然后使用<code>pivot_table</code>:</p>
<pre><code>df['idx'] = df.groupby(['rank', 'position']).cumcount()
(df.pivot_table(index=['rank','idx'], columns='position',
values='name', aggfunc='first')
.reset_index('idx', drop=True) # remove the extra `idx`
.reset_index() # make rank a column
)
</code></pre>
<p>输出:</p>
<pre><code>position rank sanitation washer
0 1 bob rick
1 1 bob rick
2 2 randy billy
</code></pre>