以下のことができずに困っています。
A列とB列を比較する。
A列に存在しない値がB列に含めれていれば、
その値をC列に出力する。
A | B | C |
---|---|---|
1 | 4 | |
2 | 5 | 5 |
4 | 6 | 6 |
9 | 7 | |
7 | 1 |
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
'B'列の値が'A'列に含まれているかを調べる df['B'].isin(df['A'])
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.isin.html
の not
にてフィルタリングするとよいかと
Python
1import pandas as pd 2 3df = pd.DataFrame({ 4 'A':[1,2,4,9,7], 5 'B':[4,5,6,7,1]}) 6 7 8df['C'] = df.loc[~df['B'].isin(df['A']), 'B'] 9print(df) 10# A B C 11#0 1 4 NaN 12#1 2 5 5.0 13#2 4 6 6.0 14#3 9 7 NaN 15#4 7 1 NaN
Series.mask()
使ってフィルタリングしても良いです
Python
1df['C'] = df['B'].mask(df['B'].isin(df['A']))
投稿2020/03/03 02:36
総合スコア15898
0
A列に存在しない値がB列に含めれていれば、
その値をC列に出力する。
という処理は一般的な「比較」ではないですね。
一番簡単に書くなら、B列の各値ごとにA列に含まれるかを判定します。applyやmapメソッドなどを使うといいでしょう。pandasでは「値がない」というのはNaN
で表します。B列の一行を見て、A列に含まれているときはNaN
を、そうでなければ行の値自身を返すような関数を定義できれば実現できます。
パフォーマンス面では、A列を直接判定対象にするより、先にset
型に変換したほうが計算量的には有利です。
投稿2020/03/03 02:14
総合スコア30935
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/03 03:52