2017-10-07 4 views
1

昨年選択:パイソン//パンダ - 私はこのデータフレームを持っている各インデックス

  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 
... 

誰かに光を当てることはできますか?年がソートされていない場合には

答えて

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 
+1

あなたは編集が好きだと願っています – Dark

+0

@Bharathshetty、ありがとう! :) – MaxU

3

使用ドロップ重複はその後sort_valuesアンドドロップを使用して

複製

ndf = df.reset_index().drop_duplicates('index',keep='first') 

すなわち:

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 
+0

良い点上記の例では、私はそれらを常に最初のものとして述べましたが、ポイントは時には最初のものではなく、混合することができる点です。私はそれを編集します。 – abutremutante

+0

私はKeyErrorを取得しています: 'index':/あなたはそれが何であるか知っていますか? – abutremutante

+1

'df.reset_index()。sort_values ...'としてみてください 'index'は列だと思っています – Dark

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 
を使用することにより
関連する問題