Search code examples
pythonpython-3.xpandasnumpylogical-or

How to built three input OR gate using Pandas


I am having dataframe df with 3 inputs (A,B,C) as listed below

A   B   C
0   0   0
0   0   1
0   1   0
0   1   1
1   0   0
1   0   1
1   1   0
1   1   1

I want built logicial or gate and have sample output like shown below

A   B   C   Output
0   0   0   0
0   0   1   1
0   1   0   1
0   1   1   1
1   0   0   1
1   0   1   1
1   1   0   1
1   1   1   1

How can this be done in pandas


Solution

  • You just need to evaluate df.A | df.B | df.C.

    df['OR_Gate'] = df.A | df.B | df.C
    

    Note: If the values in columns A, B, C are strings of 0's and 1's, then do one of the following:

    # Method-1: 
    #   Convert the strings into int and then evaluate OR_Gate: 
    #   This changes the value-types in the columns A, B, C
    df = df.astype('int')
    df['OR_Gate'] = df.A | df.B | df.C
    # Method-2: 
    #   This will not change the original data type in columns A, B, C
    #   But will correctly evaluate 'OR_Gate'.
    df['OR_Gate'] = df.A.astype(int) | df.B.astype(int) | df.C.astype(int)
    # Method-3: 
    #   If you want your final output to be in boolean form.
    df['OR_Gate'] = df.A.astype(bool) | df.B.astype(bool) | df.C.astype(bool)
    

    Detailed Solution

    import pandas as pd
    
    # Dummy data
    A = [0]*4 + [1]*4
    B = [0]*2 + [1]*2 + [0]*2 + [1]*2
    C = [0, 1]*4
    # Make Dataframe
    df = pd.DataFrame({'A': A, 'B': B, 'C': C})
    # Update 'OR_Gate' Output
    df['OR_Gate'] = df.A | df.B | df.C
    df
    

    Output:

       A  B  C  OR_Gate
    0  0  0  0        0
    1  0  0  1        1
    2  0  1  0        1
    3  0  1  1        1
    4  1  0  0        1
    5  1  0  1        1
    6  1  1  0        1
    7  1  1  1        1