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

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

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

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

pandas

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

Q&A

解決済

1回答

6557閲覧

pandasでの最大値集計の方法

papi_tokei

総合スコア106

Python 3.x

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

pandas

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

0グッド

1クリップ

投稿2017/08/18 13:30

編集2017/08/20 05:23

###前提・実現したいこと
現在pandasを少し勉強しています.
その中で,行ごとの最大値を出力したいと考えています.

###該当のソースコード
例えば,下記のソースの場合ですと,一行目の最大値はC列,二行目の最大値はC列...といった具合に集計したいです.

python

1import numpy as np 2import pandas as pd 3df = pd.DataFrame([[1,4,7],[2,5,8],[3,6,9]],columns = list("abc"))

作成したデータは以下のようになると思います.

abc
147
258
369

希望する出力結果としては,以下の表になります.

abc集計結果
147c
258c
369c

集計結果の列には,その行を集計して,最大値を含む列を追加していきたいです.
例えば,一行目ですと,a列は1でb列は4でc列は7なので,最大値を含む列はc列なので,集計結果にはc列を追加するということです.

出来れば,一行ずつFor文で出力したいです.
少し調べましたが,基本的には列の処理しか出てこなかったので,
質問させていただきました.
最悪,一行ずつ二重For文でもいいのですが,スマートな方法などあれば教えていただきたいです.

アドバイスいただければ幸いです.
よろしくお願いいたします.
###補足情報(言語/FW/ツール等のバージョンなど)
Python3
Pandas

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

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

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

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

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

guest

回答1

0

ベストアンサー

一般的に最大値のを列(C列)追加するには

Python

1import pandas as pd 2df = pd.DataFrame([[1,4,7],[2,5,8],[3,6,9]],columns = list("abc")) 3df['C'] = df.max(axis=1)

のように記述します。

出来れば,一行ずつFor文で出力したいです.

個人的には上記の方法をお勧めしますが、どうしても行毎にループを回したいのであればDataFrame.iterarows()を使って

Python

1import pandas as pd 2df = pd.DataFrame([[1,4,7],[2,5,8],[3,6,9]],columns = list("abc")) 3for index, row in df.iterrows(): 4 df.ix[index, 'C'] = max(row)

でどうでしょうか。


回答の修正

最大値があるラベルを求めたい場合は、Series.argmax()を使用するとよいと思います

Python

1import pandas as pd 2df = pd.DataFrame([[1,4,7],[2,5,8],[3,6,9]],columns = list("abc")) 3 4for index, row in df.iterrows(): 5 df.ix[index, 'RES'] = row.argmax() 6print(df)

投稿2017/08/18 14:35

編集2017/08/20 12:50
magichan

総合スコア15898

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

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

papi_tokei

2017/08/20 05:16

回答いただきありがとうございます. また,返答が遅くなってしまい申し訳ありません. 確認いたしましたが,ご提示ただいた方法は,最大値を追加する方法だと思います. 最大値ではなく,最大値を含む列(ラベル)を求めたいです. この行の最大値はc列,この行の最大値はa列といったように集計をしたいです. 私の説明不足で,お手数をおかけして申し訳ありません. 質問をもう少しわかりやすく修正いたしますので,そちらもご確認いただければ幸いです.
magichan

2017/08/20 12:51

スミマセン。 質問を勘違いしておりました。 回答を修正しましたので確認ください。
papi_tokei

2017/08/21 04:44

私の実現したいことが完璧に再現できました. ありがとうございます.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問