質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

2498閲覧

「DataFrame」indexごとの, sortと上位N個の列を抽出を行いたい

surpass

総合スコア3

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2020/09/07 22:38

「DataFrame」indexごとの, 上位N個の列を抽出し, sortを行いたい

df =

INDEX      番号 平均
201907010601 4 0.411331
201907010601 16 0.472256
201907010601 15 0.758492
201907010601 10 0.704865
201907010601 11 0.722583
201907010601 7 0.502218
201907010601 5 0.422376
201907010601 9 0.142984
201907010601 13 0.166259
201907010601 1 0.063561
201907010601 3 0.170293
201907010601 8 0.105570
201907010601 14 0.186378
201907010601 12 0.058321
201907010601 6 0.103821
201907010601 2 0.241742
201905010402 2 0.470611
201905010402 8 0.783678
201905010402 1 0.298781
201905010402 15 0.302518
201905010402 7 0.710182
201905010402 4 0.175024
201905010402 11 0.402872
201905010402 5 0.463226
201905010402 13 0.373702
201905010402 9 0.043652
201905010402 6 0.329344
201905010402 3 0.331674
201905010402 12 0.203614
201905010402 10 0.094564
201905010402 16 0.200508
201905010402 14 0.093363
201907010606 1 0.794446
201907010606 6 0.801182
201907010606 5 0.849760
201907010606 4 0.804972
201907010606 15 0.240848
201907010606 16 0.273469
201907010606 10 0.327639
201907010606 2 0.409137
201907010606 9 0.183374
201907010606 12 0.485936
201907010606 3 0.258582
201907010606 8 0.786969
201907010606 13 0.323141
201907010606 7 0.170900
201907010606 14 0.166577
201907010606 11 0.029370

発生している問題・エラーメッセージ

上記のような, DataFrameからINDEXごとに「平均」でsortし, 高い上位N個の列を抽出したいのですが, やり方がわかりません.

理想は,INDEXごとに「平均」でのsort後, 上位3個を抽出することで

df =

INDEX      番号 平均
201907010601 15 0.758492
201907010601 11 0.722583
201907010601 10 0.704865
201905010402 8 0.783678
201905010402 7 0.710182
201905010402 2 0.470611
201907010606 5 0.849760
201907010606 4 0.804972
201907010606 6 0.801182
201907010604 7 0.834579
201907010604 14 0.773029
201907010604 11 0.659245

このような出力にしたいと考えています.

試したこと

INDEXごとの処理, 「平均」の高い上位N個の列を抽出ということで, groupby関数, rank関数を用いて,

python3

1df = df[df.groupby(["INDEX"])["平均"].rank(ascending=False)<=3]

のような処理を行いましたが, 下記の結果のように, 「平均」でのsortができませんでした.

素人質問で申し訳ありませんが, 御回答よろしくお願いいたします.
df =

INDEX      番号 平均
201907010601 15 0.758492
201907010601 10 0.704865
201907010601 11 0.722583
201905010402 2 0.470611
201905010402 8 0.783678
201905010402 7 0.710182
201907010606 6 0.801182
201907010606 5 0.849760
201907010606 4 0.804972
201907010604 14 0.773029
201907010604 11 0.659245
201907010604 7 0.834579

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

nlargest()メソッドを使うと、ソートした上で、大きい値から任意の行数を取得することができます。
pandas.DataFrame.nlargest — pandas documentation
pandas.core.groupby.SeriesGroupBy.nlargest — pandas documentation
pandasでn個の最大値・最小値を取得(nlargest, nsmallest) | note.nkmk.me

以下は操作の例です。

python

1df.head() 2# INDEX 番号 平均 3# 0 201907010601 4 0.411331 4# 1 201907010601 16 0.472256 5# 2 201907010601 15 0.758492 6# 3 201907010601 10 0.704865 7# 4 201907010601 11 0.722583 8 9df.groupby('INDEX')['平均'].nlargest(3) 10# INDEX 11# 201905010402 17 0.783678 12# 20 0.710182 13# 16 0.470611 14# 201907010601 2 0.758492 15# 4 0.722583 16# 3 0.704865 17# 201907010606 34 0.849760 18# 35 0.804972 19# 33 0.801182 20# Name: 平均, dtype: float64 21 22df.groupby('INDEX')[['番号', '平均']].apply(lambda df: df.nlargest(3, '平均')) 23# 番号 平均 24# INDEX 25# 201905010402 17 8 0.783678 26# 20 7 0.710182 27# 16 2 0.470611 28# 201907010601 2 15 0.758492 29# 4 11 0.722583 30# 3 10 0.704865 31# 201907010606 34 5 0.849760 32# 35 4 0.804972 33# 33 6 0.801182

投稿2020/09/08 01:02

kirara0048

総合スコア1399

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問