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

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

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

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

pandas

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

意見交換

クローズ

2回答

470閲覧

Python pandas 列 最大値の書き換え

fzet

総合スコア1

Python 3.x

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

pandas

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

0グッド

0クリップ

投稿2023/04/20 05:23

0

0

テーマ、知りたいこと

各レコードで指定カラム範囲内で最大値の書き換えを実施したいのですが、
どのようにコードを記載すればよいか意見を頂けますか。

背景、状況

状況
df

NO.12345
100.210.50.8
200.50.30.45

変更後
df

NO.12345
100.200.50.8
200.50.30.40

列1234の中で最大値を0.0(float)にする
コードを記載したいです。

下記コードではうまくいきません
何も変わりませんでした
replaceは複数カラムに対応できないのでしょうか。

別案があれば教えて頂けますと助かります。

python

1df = df.replace (df_m2[['1', '2', '3', '4', '5', '6']].max(axis=1),0) 2

環境:Python3.9.8

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

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

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

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

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

回答2

#1

can110

総合スコア38266

投稿2023/04/20 05:52

.eqにて最大値に一致する列に対して0をセットすればよいと思います。

Python

1 2import pandas as pd 3 4df = pd.DataFrame([[0,0.2,1,0.5,0.8],[0,0.5,0.3,0.4,5]], columns=[f'{i+1}' for i in range(5)]) 5print(df) 6# 1 2 3 4 5 7#0 0 0.2 1.0 0.5 0.8 8#1 0 0.5 0.3 0.4 5.0 9 10df2 = df[['1', '2', '3', '4', '5']] 11max_v = df2.max(axis=1) 12df[df2.eq(max_v, axis=0)] = 0 13print(df) 14# 1 2 3 4 5 15#0 0 0.2 0.0 0.5 0.8 16#1 0 0.5 0.3 0.4 0.0

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

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

#2

melian

総合スコア19798

投稿2023/04/20 06:29

編集2023/04/20 06:40

列1234の中で最大値を0.0(float)にする

python

1import pandas as pd 2import io 3 4csv_data = ''' 5NO.,1,2,3,4,5 61,0,0.2,1,0.5,0.8 72,0,0.5,0.3,0.4,5 8''' 9df = pd.read_csv(io.StringIO(csv_data)) 10 11# 12for col in df.loc[:,'1':'4'].columns: 13 df.loc[df[col] == df[col].max(), col] = 0 14 15print(df) 16 17# NO. 1 2 3 4 5 18# 0 1 0 0.2 0.0 0.0 0.8 19# 1 2 0 0.0 0.3 0.4 5.0

最大値の要素が1つだけであれば以下でも可。

python

1for col in df.loc[:,'1':'4'].columns: 2 df.loc[df.idxmax()[col], col] = 0

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

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

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問