回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个pandas数据框架,它由不同的子组组成。</p>
<pre><code> df = pd.DataFrame({
'id':[1, 2, 3, 4, 5, 6, 7, 8],
'group':['a', 'a', 'a', 'a', 'b', 'b', 'b', 'b'],
'value':[.01, .4, .2, .3, .11, .21, .4, .01]
})
</code></pre>
<p>我想找出每个id在其组中的排名,比如,值越低越好。在上面的示例中,在组A中,Id 1的秩为1,Id 2的秩为4。在B组中,Id 5的秩为2,Id 8的秩为1,依此类推。</p>
<p>现在我通过以下方式来评估等级:</p>
<ol>
<li><p>按值排序。</p>
<p><code>df.sort('value', ascending = True, inplace=True)</code></p></li>
<li><p>创建一个ranker函数(它假设变量已经排序)</p>
<p><code>def ranker(df):
df['rank'] = np.arange(len(df)) + 1
return df</code></p></li>
<li><p>分别对每组应用ranker函数:</p>
<p><code>df = df.groupby(['group']).apply(ranker)</code></p></li>
</ol>
<p>这个过程可以工作,但当我在数百万行数据上运行它时,它确实很慢。有人对如何使ranker函数更快有什么想法吗。</p>