Joh*_*hin 5 python sorting pandas
我有一个数据集,我想根据它排序和分配排名.
假设它有两列,一列是年份,另一列是我想要排序的列.
import pandas as pd
data = {'year': pd.Series([2006, 2006, 2007, 2007]),
'value': pd.Series([5, 10, 4, 1])}
df = pd.DataFrame(data)
Run Code Online (Sandbox Code Playgroud)
我希望每年对列"值"进行排序,然后对其进行排名.我想拥有的是什么
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
Run Code Online (Sandbox Code Playgroud)
Ale*_*der 10
您可以使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5558 次 |
| 最近记录: |