Python 如何对熊猫进行分组、排序,然后取回熊猫中第二高的一行?
我想首先按Python 如何对熊猫进行分组、排序,然后取回熊猫中第二高的一行?,python,pandas,sorting,group-by,Python,Pandas,Sorting,Group By,我想首先按ID对数据进行分组,对Offer列执行降序排序,然后获取第二行。我如何使用熊猫来实现这一点 ID Vehicle Auction Offer 0 3580845 2005 Volvo XC90 V8 Copart 215 1 3580845 2005 Volvo XC90 V8 Manheim Salvage API 170 2 3580845 2005
ID
对数据进行分组,对Offer
列执行降序排序,然后获取第二行。我如何使用熊猫来实现这一点
ID Vehicle Auction Offer
0 3580845 2005 Volvo XC90 V8 Copart 215
1 3580845 2005 Volvo XC90 V8 Manheim Salvage API 170
2 3580845 2005 Volvo XC90 V8 Merged Salvage 195
3 3580845 2005 Volvo XC90 V8 Manheim Salvage 390
4 3580845 2005 Volvo XC90 V8 IAA 270
5 3580845 2005 Volvo XC90 V8 SVP 175
6 3580789 2003 Lexus ES 300 Copart 180
7 3580789 2003 Lexus ES 300 Merged Salvage 190
8 3580789 2003 Lexus ES 300 Manheim Salvage 355
9 3580789 2003 Lexus ES 300 IAA 270
10 3580789 2003 Lexus ES 300 SVP 180
预期:
ID Vehicle Auction Offer
0 3580845 2005 Volvo XC90 V8 IAA 270
1 3580789 2003 Lexus ES 300 IAA 270
首先需要并使用计数值,然后按以下方式过滤:
首先需要并使用计数值,然后按以下方式过滤:
您还可以结合使用
groupby
和rank
from io import StringIO
import pandas as pd
data = pd.read_table(StringIO("""ID Vehicle Auction Offer
3580845 2005VolvoXC90V8 Copart 215
3580845 2005VolvoXC90V8 ManheimSalvageAPI 170
3580845 2005VolvoXC90V8 MergedSalvage 195
3580845 2005VolvoXC90V8 ManheimSalvage 390
3580845 2005VolvoXC90V8 IAA 270
3580845 2005VolvoXC90V8 SVP 175
3580789 2003LexusES300 Copart 180
3580789 2003LexusES300 MergedSalvage 190
3580789 2003LexusES300 ManheimSalvage 355
3580789 2003LexusES300 IAA 270
3580789 2003LexusES300 SVP 180"""), sep=' ')
offer_rank_by_id = data.groupby('ID').rank(method = 'min', ascending = False).loc[:,'Offer'] == 2 # using 2 because we want to select the second highest offer for each id
data.loc[offer_rank_by_id,:]
# ID Vehicle Auction Offer
# 4 3580845 2005VolvoXC90V8 IAA 270
# 9 3580789 2003LexusES300 IAA 270
您还可以结合使用
groupby
和rank
from io import StringIO
import pandas as pd
data = pd.read_table(StringIO("""ID Vehicle Auction Offer
3580845 2005VolvoXC90V8 Copart 215
3580845 2005VolvoXC90V8 ManheimSalvageAPI 170
3580845 2005VolvoXC90V8 MergedSalvage 195
3580845 2005VolvoXC90V8 ManheimSalvage 390
3580845 2005VolvoXC90V8 IAA 270
3580845 2005VolvoXC90V8 SVP 175
3580789 2003LexusES300 Copart 180
3580789 2003LexusES300 MergedSalvage 190
3580789 2003LexusES300 ManheimSalvage 355
3580789 2003LexusES300 IAA 270
3580789 2003LexusES300 SVP 180"""), sep=' ')
offer_rank_by_id = data.groupby('ID').rank(method = 'min', ascending = False).loc[:,'Offer'] == 2 # using 2 because we want to select the second highest offer for each id
data.loc[offer_rank_by_id,:]
# ID Vehicle Auction Offer
# 4 3580845 2005VolvoXC90V8 IAA 270
# 9 3580789 2003LexusES300 IAA 270