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
是一列