Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按另一列中的值对列进行排序_Python_Sorting_Pandas - Fatal编程技术网

Python 按另一列中的值对列进行排序

Python 按另一列中的值对列进行排序,python,sorting,pandas,Python,Sorting,Pandas,我有一个数据集,我想根据它排序和分配等级 假设它有两列,一列是year,另一列是我要排序的列 import pandas as pd data = {'year': pd.Series([2006, 2006, 2007, 2007]), 'value': pd.Series([5, 10, 4, 1])} df = pd.DataFrame(data) 我想每年对“value”列进行排序,然后对其进行排名。我想要的是 data2= {'year': pd.Series([2

我有一个数据集,我想根据它排序和分配等级

假设它有两列,一列是year,另一列是我要排序的列

import pandas as pd
data = {'year': pd.Series([2006, 2006, 2007, 2007]), 
        'value': pd.Series([5, 10, 4, 1])}
df = pd.DataFrame(data)
我想每年对“value”列进行排序,然后对其进行排名。我想要的是

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
(使用
升序=False
首先获取最大值)。您不需要在
groupby
中排序,因为结果被索引到数据帧(性能稍快)

考虑一个带有sort的函数:

def rankfct(row):    
    row['rank'] = row['value'].rank(ascending=False)    
    return row

df = df.groupby(['year']).apply(rankfct).sort(['year','value'], ascending=[1,0])

你真的需要变换吗?
df.groupby('year')['value'].rank()不会做同样的事情吗?是的,那更简单。哇,这就是我要找的。非常感谢你们两位!好。是否有一种方法可以将具有空值的值逐个排序?我试过4种方法,但都不管用
def rankfct(row):    
    row['rank'] = row['value'].rank(ascending=False)    
    return row

df = df.groupby(['year']).apply(rankfct).sort(['year','value'], ascending=[1,0])