pandas通过另一列的值对一列进行排序[英] pandas sort a column by values in another column

本文是小编为大家收集整理的关于pandas通过另一列的值对一列进行排序的处理方法,想解了pandas通过另一列的值对一列进行排序的问题怎么解决?pandas通过另一列的值对一列进行排序问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一个数据集,我想根据它进行排序和分配排名.

假设它有两列,一列是年份,另一列是我要排序的列.

import pandas as pd
data = {'year': pd.Series([2006, 2006, 2007, 2007]), 
        'value': pd.Series([5, 10, 4, 1])}
df = pd.DataFrame(data)

我想按每年对"价值"列进行排序,然后对其进行排名.我想要的是

data2= {'year': pd.Series([2006, 2006, 2007, 2007]), 
        'value': pd.Series([10, 5, 4, 1]),  
        'rank': pd.Series([1, 2, 1, 2]}
df2=pd.DataFrame(data2)

>>> df2
   rank  value  year
0     1     10  2006
1     2      5  2006
2     1      4  2007
3     2      1  2007

推荐答案

可以先用groupby再用rank(先用ascending=False取最大值).您不需要在 groupby 中排序,因为结果会被索引数据帧(性能稍快).

df['yearly_rank'] = df.groupby('year', sort=False)['value'].rank(ascending=False)

>>> df.sort_values(['year', 'yearly_rank'])
   value  year  yearly_rank
1     10  2006            1
0      5  2006            2
2      4  2007            1
3      1  2007            2

本文地址:https://www.itbaoku.cn/post/1728003.html