Python 为大熊猫中的每个指数选择最后一年

Python 为大熊猫中的每个指数选择最后一年,python,pandas,grouping,Python,Pandas,Grouping,我有这个数据框: score year ... index 0 123 2015 0 5354 2016 0 4314 2014 12 4542 2018 12 4523 2017 13 123 2014 13 123 2012 13 231 2016 ... 我只想为每个索引选择最后一年,

我有这个数据框:

         score    year ...
index    
0        123      2015
0        5354     2016
0        4314     2014
12       4542     2018
12       4523     2017
13       123      2014
13       123      2012
13       231      2016
...
我只想为每个索引选择最后一年,所以它看起来像这样:

         score    year ...
index    
0        123      2016
12       4542     2018
13       231      2016
...

使用拖放副本,即

ndf = df.reset_index().drop_duplicates('index',keep='first')
如果年份未分类,则

使用排序\u值并删除重复项

ndf = df.reset_index().sort_values('year').drop_duplicates('index',keep='last')

输出:

index score year 1 0 5354 2016 3 12 4542 2018 7 13 231 2016 指数评分年 1 0 5354 2016 3 12 4542 2018 7 13 231 2016
使用拖放副本,即

ndf = df.reset_index().drop_duplicates('index',keep='first')
如果年份未分类,则

使用排序\u值并删除重复项

ndf = df.reset_index().sort_values('year').drop_duplicates('index',keep='last')

输出:

index score year 1 0 5354 2016 3 12 4542 2018 7 13 231 2016 指数评分年 1 0 5354 2016 3 12 4542 2018 7 13 231 2016
选项1:

In [188]: df.groupby(level=0, group_keys=False).apply(lambda x: x.nlargest(1, 'year'))
Out[188]:
        score  year
index             
0       5354  2016
12      4542  2018
13       231  2016
In [193]: df.sort_values('year', ascending=False).groupby(level=0, group_keys=False).head(1)
Out[193]:
       score  year
index             
12      4542  2018
0       5354  2016
13       231  2016
选项2:

In [188]: df.groupby(level=0, group_keys=False).apply(lambda x: x.nlargest(1, 'year'))
Out[188]:
        score  year
index             
0       5354  2016
12      4542  2018
13       231  2016
In [193]: df.sort_values('year', ascending=False).groupby(level=0, group_keys=False).head(1)
Out[193]:
       score  year
index             
12      4542  2018
0       5354  2016
13       231  2016

选项1:

In [188]: df.groupby(level=0, group_keys=False).apply(lambda x: x.nlargest(1, 'year'))
Out[188]:
        score  year
index             
0       5354  2016
12      4542  2018
13       231  2016
In [193]: df.sort_values('year', ascending=False).groupby(level=0, group_keys=False).head(1)
Out[193]:
       score  year
index             
12      4542  2018
0       5354  2016
13       231  2016
选项2:

In [188]: df.groupby(level=0, group_keys=False).apply(lambda x: x.nlargest(1, 'year'))
Out[188]:
        score  year
index             
0       5354  2016
12      4542  2018
13       231  2016
In [193]: df.sort_values('year', ascending=False).groupby(level=0, group_keys=False).head(1)
Out[193]:
       score  year
index             
12      4542  2018
0       5354  2016
13       231  2016

通过使用
idxmax

df=df.reset_index()
df.loc[df.groupby('index').year.idxmax()].set_index('index')

Out[148]: 
       score  year
index             
0       5354  2016
12      4542  2018
13       231  2016

通过使用
idxmax

df=df.reset_index()
df.loc[df.groupby('index').year.idxmax()].set_index('index')

Out[148]: 
       score  year
index             
0       5354  2016
12      4542  2018
13       231  2016

说得好。在上面的例子中,我说它们总是第一位的,但问题是,有时它们不是第一位的,可以混合使用。我会编辑它。我得到一个KeyError:'index':/你知道那可能是什么吗?试着用
df.reset\u index().sort\u value…
我认为
index
是一个很好的观点。在上面的例子中,我说它们总是第一位的,但问题是,有时它们不是第一位的,可以混合使用。我会编辑它。我得到一个KeyError:'index':/你知道那可能是什么吗?试着用
df.reset\u index().sort\u value…
我认为
index
是一列