我有这个数据框:
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
...
答案 0 :(得分:3)
使用drop duplicates即
ndf = df.reset_index().drop_duplicates('index',keep='first')
如果年份未分类,则
使用sort_values并删除重复项:
ndf = df.reset_index().sort_values('year').drop_duplicates('index',keep='last')
或
ndf =df.reset_index().sort_values('year',ascending=False).drop_duplicates('index',keep='first')
输出:
index score year 1 0 5354 2016 3 12 4542 2018 7 13 231 2016
答案 1 :(得分:3)
选项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
选项2:
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 :(得分:0)
使用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