【问题标题】:Compare two or more columns values only if another column value is True仅当另一列值为 True 时才比较两列或多列值
【发布时间】:2019-11-15 01:15:19
【问题描述】:

仅当另一列值为 True 时,您将如何比较两个(或更多列)值。 理想情况下,输出将为 True(如果一切都正确匹配)否则为 False。

类似的东西:df['value1'].equals(df['value2']) 但前提是 df['isValid'] 为真。

对不起,如果这是一个愚蠢的问题,我是熊猫的初学者......

考虑以下数据框:

示例 1:

isValid     value1   value2
True        50       50
True        19       19
False       48       40

输出应该是:True作为记录一和二匹配,并且“isValid”列是True(意味着我们必须比较值)

示例2:

isValid     value1   value2
False       50       50
False       19       19
False       48       40

输出应该是True(不做比较,那就没什么错了)

示例 3:

isValid     value1   value2
True        50       50
False       19       19
True        48       40

输出应该是False(因为记录3的value1和value2不同)

【问题讨论】:

  • 只需按 isValid 过滤,然后进行比较。
  • 你能过滤出真值吗?

标签: python pandas dataframe


【解决方案1】:

我会的

df.eval('value1==value2')[df.isValid].all()

【讨论】:

  • @WilliamW 在最后添加所有内容?
  • 一切正常!我接受您的回答,因为这是(对我而言)最易读/最容易理解的。它还具有比较您指定的列而不是所有 df 列的优点
【解决方案2】:

这是一种方法:

df1[df1['isValid']].set_index('isValid').nunique(1).eq(1).all().all()
#True

【讨论】:

  • 我认为你可以编辑你的答案,然后我们可以删除我们的 cmets,因为这对未来的人来说毫无用处
【解决方案3】:

这是一个简单的函数,它处理所有 False is 'isValid' 的情况,仍然返回单个 bool True

def my_comp(df):
    u = df[df.isValid]
    if u.empty:
        return True
    else:
        return u['value1'].eq(u['value2']).all()

my_comp(df1)
#True

my_comp(df2)
#True

my_comp(df3)
#False

【讨论】:

  • 这对我来说很好,谢谢你的快速回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-10
  • 1970-01-01
相关资源
最近更新 更多