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

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

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

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

pandas

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

Q&A

解決済

1回答

996閲覧

ifを使って、データフレームの2列の値が同一の時、新しい列に指定したキーワードを返したい

ForestBamboo

総合スコア17

Python

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

pandas

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

0グッド

0クリップ

投稿2020/09/17 10:01

お世話になっております。
お忙しいところ大変恐縮ですが、ご教示頂けますと幸いでございます。

下記のようなデータフレームがあるとして

|名前 |購入ID|初回購入ID|
|ぱんだ| 0001| 0001|
|うさぎ| 0002| 0002|
|ぞう | 0003| 0003|
|たぬき| 0004| 0004|
|ぱんだ| 0005| 0001|
|わに | 0006| 0006|

購入IDと初回購入IDが一致するときに”新規”それ以外は”既存”を返したいと考えております。
返す列は新しく作成します。

|名前 |購入ID|初回購入ID|新規既存
|ぱんだ| 0001| 0001|  新規
|うさぎ| 0002| 0002|  新規
|ぞう | 0003| 0003|  新規
|たぬき| 0004| 0004|  新規
|ぱんだ| 0005| 0001|  既存
|わに | 0006| 0006|  新規

試したコードは下記となります。
1つ目

python

1if df["初回購入ID"] == df["購入ID"]: 2 df["新規既存"] = "新規" 3else: 4 df["新規既存"] = "既存"

結果↓
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

2つ目

python

1if df["初回購入ID"] == df["購入ID"]: 2 result = "新規" 3else: 4 result = "既存" 5 6df["新規既存"] = result

結果↓
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

何か根本的に間違えてる気がします。。
大変恐縮ですが、ご教示頂けますと幸いでございます。

何卒、よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

if文の条件式として、True/Falseの列ベクトルを渡しているため、どこを見て判断してよいかわからず、ambiguous(曖昧)というエラーになっています。

ループで1行ずつif文で確認していく、という方法も使えますが、せっかくpandasを使っているので、一気に変換する方法を探りましょう。

今回の場合は、

Python

1df['新規既存'] = (df['初回購入ID'] == df['購入ID']).map({True: '既存', False: '新規'})

で、目指す動作になると思います。

投稿2020/09/17 11:34

toast-uz

総合スコア3266

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

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

ForestBamboo

2020/09/18 07:54

ありがとうございます! ご教示頂いた方法で実現できました。 お忙しい中、教えていただきましてありがとうございました。 引き続き、よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問