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

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

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

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

pandas

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

Q&A

解決済

2回答

689閲覧

特定の文字を含む行の最大値をその文字別に行全体で抽出したい。

8960

総合スコア108

Python

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

pandas

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

0グッド

0クリップ

投稿2021/11/17 04:21

編集2021/11/17 04:28

前提・実現したいこと

以下のコードでいうと、PlayerごとにそのPlayerのSpeedの最大値を発見してその最大値が発生したDateやほかの値も一緒に抽出したいです。

最終的なイメージの例

Player Date    Speed Angle Efficiency
Player1 2021/4/15 55 20 66
Player2 2021/4/17 87 15 43
Player3 2021/4/12 96 18 42
Player4 2021/4/25 92 3 74
Player5 2021/4/22 100 10 55

よろしくお願いします。

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

該当のソースコード

python

1import pandas as pd 2import numpy as np 3pd.options.display.float_format="{:.1f}".format 4start,end = "2021/4/1","2021/4/30" 5dates = pd.date_range(start=start,end=end,freq="D") 6players = [f"Player{i}"for i in range(1,6)] 7 8N = 200 9dates = np.random.choice(dates,size=N) 10dates.sort() 11players=np.random.choice(players,size=N) 12 13df = pd.DataFrame({ 14 "Date": dates, 15 "Player": players, 16 "Speed": np.random.sample(N) * 100.0, 17 "Angle": np.random.sample(N) * 40.0 - 20.0, 18 "Efficiency": np.random.sample(N) * 100.0, 19}) 20 21dfx = df.groupby("Player").idxmax() 22print(dfx)

試したこと

Playerごとに、というのを.groupby()で行うと集計されて?しまって出力されてしまいました。

補足情報(FW/ツールのバージョンなど)

python,vscode

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

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

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

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

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

can110

2021/11/17 04:35

「Playerの最大値」とは具体的に何の値を指しているでしょうか?(行番号の最大値?)
8960

2021/11/17 04:41

申し訳ありません、先程修正致しました。 Speedの最大値でした。
can110

2021/11/17 04:47

了解しました。
guest

回答2

0

idxmax() を使う方法です。

python

1dfx = df.iloc[df.groupby("Player")["Speed"].idxmax()] 2 3print(dfx) 4# 5 Date Player Speed Angle Efficiency 6135 2021-04-20 Player1 98.8 -19.0 20.5 7166 2021-04-25 Player2 98.5 -2.3 28.1 8174 2021-04-27 Player3 89.8 -5.9 91.3 9188 2021-04-29 Player4 90.6 -17.0 59.6 10175 2021-04-27 Player5 99.3 9.7 52.1

投稿2021/11/17 04:57

melian

総合スコア19865

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

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

0

ベストアンサー

以下のように最大値を得て、その最大値と一致する行を抽出すればよいです。
なお、同じPlayerに対して最大値が複数存在する場合は、複数行の結果が返ります。
参考:Get the row(s) which have the max value in groups using groupby

Python

1idx = df.groupby('Player')['Speed'].transform(max) == df['Speed'] 2print(df[idx]) 3# Date Player Speed Angle Efficiency 4#50 2021-04-06 Player3 99.4 19.1 21.4 5#120 2021-04-16 Player4 99.9 -11.8 32.3 6#134 2021-04-18 Player2 97.6 -5.0 35.9 7#145 2021-04-20 Player5 89.2 -18.3 85.6 8#175 2021-04-26 Player1 96.4 7.6 41.8

投稿2021/11/17 04:47

can110

総合スコア38278

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問