39608


python初心者です。pandasで以下のことをやりたいです。

[code]

    |A|B|C|
    |OK|OK|OK|
    |-|OK|NG|
    |OK|NG|OK|
    
[/code]

といったデータフレームがあった場合  
A,B,C列がすべてOKだったら、新規に追加したnew列にOK  
それ以外はNGとしたい。

[code]

    |A|B|C|new|
    |OK|OK|OK|OK|
    |-|OK|NG|NG|
    |OK|NG|OK|NG|
    
[/code]

宜しくお願いいたします。


CC BY-SA 3.0
2017-11-16T01:32:57.673
39604
2017-11-16T03:47:01.967
2017-11-16T02:00:16.703
19110
26212
question
python pandas
複数列を条件に新たな列を追加したい


データフレームということなのでPandasの前提で解答します。  
（DataFrameの準備までのコードを質問に書いてもらえると解答しやすいです）

[code]

    >>> import pandas as pd
    >>> import numpy as np
    >>> df = pd.DataFrame({
            'A': [True, np.nan, True],
            'B': [True, True, False],
            'C': [True, False, True],
        })
    >>> df.all(axis=1)
    0     True
    1    False
    2    False
    dtype: bool
    >>> df['new'] = df.all(axis=1)
    >>> df
          A      B      C    new
    0  True   True   True   True
    1   NaN   True  False  False
    2  True  False   True  False
    
[/code]

* * *

追記.  
True/False ではなく 'OK'/'NG' という文字の場合は以下のようにできます。  
速度より分かりやすさ優先でコードを書きました

[code]

    >>> import pandas as pd
    >>> import numpy as np
    >>> df = pd.DataFrame({'A': ['OK', np.nan, 'OK'], 'B': ['OK', 'OK', 'NG'], 'C': ['OK', 'NG', 'OK']})
    >>> df
         A   B   C
    0   OK  OK  OK
    1  NaN  OK  NG
    2   OK  NG  OK
    >>> df.replace('OK', True, inplace=True)
    >>> df.replace('NG', False, inplace=True)
    >>> df
          A      B      C
    0  True   True   True
    1   NaN   True  False
    2  True  False   True
    >>> df['new'] = df.all(axis=1)
    >>> df
          A      B      C    new
    0  True   True   True   True
    1   NaN   True  False  False
    2  True  False   True  False
    >>> df.replace(True, 'OK', inplace=True)
    >>> df.replace(False, 'NG', inplace=True)
    >>> df
         A   B   C new
    0   OK  OK  OK  OK
    1  NaN  OK  NG  NG
    2   OK  NG  OK  NG
    
[/code]


CC BY-SA 3.0
2017-11-16T02:54:20.390
39608
2017-11-16T03:47:01.967
2017-11-16T03:47:01.967
806
806
39604
answer