python - 在构建 Pandas DataFrame 时使用逻辑运算符

标签 python pandas logical-operators

我有两段 pandas 代码,我认为它们应该是等效的,但第二段没有达到我的预期。

# snippet 1
    data = all_data[[((np.isfinite(all_data[self.design_metric][i]) 
                    and all_data['Source'][i] == 2)) 
                    or ((np.isfinite(all_data[self.actual_metric][i]) 
                    and all_data['Source'][i] != 2))
                    for i in range(len(all_data))]]


# snippet 2
    data = all_data[(all_data['Source'] == 2 &
                    np.isfinite(all_data[self.design_metric])) |
                    (all_data['Source'] != 2 &
                    np.isfinite(all_data[self.actual_metric]))]

每个部分(例如 all_data['Source'] == 2 )都按照我自己的预期进行,但似乎我在逻辑运算符上做错了,因为最终结果是得出与列表理解版本不同的结果。

最佳答案

& 运算符比 ==(或任何比较运算符)绑定(bind)得更紧密。参见 the documentation .一个更简单的例子是:

>>> 2 == 2 & 3 == 3
False

这是因为它被分组为 2 == (2 & 3) == 3,然后调用了比较链。这就是您的情况。您需要在每个比较前后加上括号。

 data = all_data[((all_data['Source'] == 2) &
                np.isfinite(all_data[self.design_metric])) |
                ((all_data['Source'] != 2) &
                np.isfinite(all_data[self.actual_metric]))]

请注意 ==!= 比较前后的额外括号。

关于python - 在构建 Pandas DataFrame 时使用逻辑运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19581582/

相关文章:

python - csv 文件作为 Pandas 数据框时的数据类型问题

python - 给定 2 个 int 值,如果一个是负数,另一个是正数,则返回 True

javascript - 如何避免在 Redux 的 mapStateToProps 中使用 && 逻辑运算符

python - python中的前导零

python - 在 python 中将 64 位整数转换为 8 个单独的 1 字节整数

pandas - 匹配查找结果错误 - 只能比较具有相同标签的系列对象

optimization - 在评估数据绑定(bind)时, knockout 是否针对逻辑运算符进行优化?

javascript - AES 在 cryptojs 中加密并在 python Crypto.Cipher 中解密

python - 让 argparse 收集但不响应标志

python-3.x - Python dataFrame 获取同一列中的所有排列