実現したいこと
vscodeを用いてpythonでdataframeの計算をしています.
dataframeの特定の列の数値を条件に当てはめ,新しい列に計算した値を代入したいと考えております.
具体的には,下記の表において,num1×5の値が
・10以下
・10100200
・100
・200~
の場合に,それぞれ違う数値を新しく作るnum3の列に代入したいです.
a.csv↓
||name1|num1|num2
|:--|:--:|--:|
|0|a|1|3
|1|b|2|4
|2|a|11|5
|3|b|12|6
|4|a|50|7
5|b|51|8|
発生している問題・エラーメッセージ
if文の中でdataframeを用いると,dataframe全体で考えた際の真偽が判断できないためこのようなエラーが出ていると把握しました.
しかし,条件ごとに違う値を入れる方法がわからず,お手数をおかけしますがご教示いただけますと幸いです.
f"The truth value of a {type(self).__name__} is ambiguous. " ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
該当のソースコード
python
1import pandas as pd 2 3df = pd.read_csv('a.csv') 4A = 5 5 6print(df) 7 8if 0 < A * df['num1'] < 10 : 9 df['num3'] = 5 10elif 10 <= A * df['num1'] < 100 : 11 df['num3'] = 10 *A *df['num2'] 12elif 100 <= A * df['num1'] < 200 : 13 df['num3'] = 15 *A *df['num2'] 14elif 200 <= A * df['num1'] : 15 df['num3'] = 20 *A *df['num2'] 16else : 17 df['num3'] = 'error' 18 19print(df)
補足情報
pandasのバージョンは1.3.4です
追加
追加の質問で恐縮ですが,name1がaの行のみにこの値を代入することは可能でしょうか?
if文の中でdataframeを使わなかった際は,
df['num2'][df['name1'].str.contains('a')]*0+5
のように指定していたのですが,当たり前ですがこのままではうまく回らず…
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/20 08:19
2021/12/20 08:23
2021/12/20 08:30