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

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

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

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

pandas

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

Q&A

解決済

1回答

1481閲覧

条件式に合致する数値を代入したい

hidemomo

総合スコア31

Python

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

pandas

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

0グッド

0クリップ

投稿2020/05/27 15:02

pandasのある列の条件に合致するとき、違う列に番号を代入したいのですがうまくできません。

データセット(df)

indexAB
1200
2400
3600
4800
51000

やりたいこと

dfのA列で条件式に合致するとき、B列に数値を代入したいです。
(条件式)A列  B列
・0 < i <= 20   1
・21 < i <= 40 2
・41 < i <= 60 3
・61 < i <= 80 4
・81 < i <= 100 5

やってみたこと

python

1for i in df['A']: 2 if 0 < i <= 20 : df['B']=1 3 elif 21 < i <= 40 : df['B']=2 4 elif 41 < i <= 60 : df['B']=3 5 elif 61 < i <= 80 : df['B']=4 6 elif 81 < i <= 100 : df['B']=5 7 else: nothing 8

df['B']のoutputは全て5になります。df['B']をprintにすると、1,2,3,4,5となりますのでdf['B]への代入が理解できていないと思います。
また、可能なら、20刻みの一定間隔なので一括で処理する方法がありましたら、ご教示頂けると幸甚です。

よろしくお願いします。

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

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

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

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

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

meg_

2020/05/27 15:36

df['A']の最終行でelif 81 < i <= 100 : df['B']=5がTrueとなりdf['B']=5の結果が残るからです。理解できなければ、上記コードでiとdfの値を出力しながら確認してみてください。 やりたいことについては「pandas 条件」で検索すれば情報が見つかります。
guest

回答1

0

ベストアンサー

df['B']=1はB列全体への代入です。よって毎回全行書き換わってます。
やり方は色々ありますので一例として

python

1import pandas as pd 2df=pd.DataFrame({"A":[20,40,60,80,100],"B":[0,0,0,0,0]}) 3for i in range(len(df)): 4 if 0 < df.iat[i,0] <= 20 : df.iat[i,1]=1 5 elif 21 < df.iat[i,0] <= 40 : df.iat[i,1]=2 6 elif 41 < df.iat[i,0] <= 60 : df.iat[i,1]=3 7 elif 61 < df.iat[i,0] <= 80 : df.iat[i,1]=4 8 elif 81 < df.iat[i,0] <= 100 : df.iat[i,1]=5 9 else: nothing

投稿2020/05/27 15:42

x98000

総合スコア1096

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

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

hidemomo

2020/05/27 16:10

ありがとうございます。iatを使うのですね。助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問