前提・実現したいこと
pandas dataframeにおける複数カラムによる順位付けについて。
pandas dataframeにおいて、あるカラムの値ごとに分類したのち、複数のカラムの値を使って順位付けし、順位が1かどうかをbooleanからなるseriesで抽出したいです。
(例)
下記のdata frameは、idが1,2の生徒がそれぞれ2回、数学と理科のテストを受けた結果です。
ここから、生徒1,2それぞれについて、数学の得点が最高のレコード、ただし同点のレコードがある場合には理科の得点が最低のレコードを抽出したい。
発生している問題・エラーメッセージ
エラーは表示されないですが、以下の2点の問題があります。 ・カラムごとにTrue, Flaseが返り値になってしまう。(2カラムを持つdata frameが返ってくる。) ・rankの引数として、ascendingにリストを渡すと、Falseが機能しない。
該当のソースコード
python
1# データ 2df_test = pd.DataFrame(data={ 3 'id': [1, 2, 1, 2], 4 'math': [60, 80, 60, 70], 5 'science': [70, 80, 80, 70] 6}) 7 8# 実行した処理 9df_test.groupby('id')[['math', 'science']].rank(ascending=[False, True], method='min') == 1 10 11# 処理結果 12math science 130 True True 141 False False 152 True False 163 True True 17 18# 返ってきてほしい結果 190 True 201 True 212 False 223 False 23Name: flag, dtype: bool 24
試したこと
次に試すことが思いつかない状況です。
補足情報(FW/ツールのバージョンなど)
Anaconda3-2019.03
pandas.version : 0.24.2
回答3件
あなたの回答
tips
プレビュー