【问题标题】:How to built three input OR gate using Pandas如何使用 Pandas 构建三个输入或门
【发布时间】:2019-10-25 03:44:35
【问题描述】:

我的数据框 df 有 3 个输入(A、B、C),如下所示

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

我想要构建逻辑或门,并有如下所示的示例输出

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

如何在 pandas 中做到这一点

【问题讨论】:

  • 看不到图片,能把你的数据和代码放上来吗?

标签: python python-3.x pandas numpy logical-or


【解决方案1】:

您只需要评估df.A | df.B | df.C

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

注意:如果 A、B、C 列中的值是 0 和 1 的字符串,则执行以下操作之一:

# 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)

详细解决方案

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

输出

   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

【讨论】:

  • @Rahulrajan 仅当您将字符串强制为真假时...
  • 让我们测试一下这个理论。它可能需要一些改变。但是你有什么样的字符串?是 1 和 0 的字符串吗?
  • @CypherX,我有 True 或 False 。我是否应该将 True 编码为 1 并将 False 编码为 0 才能完成这项工作。或者有没有其他简单的方法
  • 如果您有TrueFalse,则只需使用df.A.astype(bool) | df.B.astype(bool) | df.C.astype(bool)。这会将 0 和 1 转换为 False/True,并将 0 和 1 字符串以及 True/False 字符串转换为布尔 True/False,然后评估 OR-Gate。
  • @Rahulrajan 请考虑 acceptingupvoting 解决方案(如果适用)。谢谢。
【解决方案2】:

你可以要求all的值满足条件。

df = pd.DataFrame([[0,0,0],[0,0,1], [0,1,0], [0,0,0]], columns=['A', 'B', 'C'])
df['Output'] = df.eq(False).all(1).astype(int)

df

Out[1]: 
   A  B  C  Output
0  0  0  0       0
1  0  0  1       1
2  0  1  0       1
3  0  0  0       0

【讨论】:

  • @Micheal Gardner ,它是否也适用于字符串
最近更新 更多