【问题标题】:Pandas Dataframe do something in column A based on column B being True or False [duplicate]Pandas Dataframe 根据 B 列为真或假在 A 列中执行某些操作 [重复]
【发布时间】:2022-02-02 00:38:24
【问题描述】:

例如,我的数据框中有 2 列

    A    B
0   4   True
1   3   False
2   4   False
3   3   True

如果 B 是 True,我现在想将 A 中的值加 1,如果 B 是 False,则减 2。

有没有一种干净的方法可以将它放入 if 而不遍历所有行?我真正想做的比减法和加法要复杂一些,但我在这里简化了这个问题。所以我很高兴没有指定加 1 和减 2 的超简短答案。

希望有人可以帮助我:)

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您可以使用np.where,其中使用“B”列作为条件:

    df['A'] = np.where(df['B'], df['A'].add(1), df['A'].sub(2))
    

    输出:

       A      B
    0  5   True
    1  1  False
    2  2  False
    3  4   True
    

    【讨论】:

    • 我很欣赏快速响应,但这只是我需要的一半,而且我不需要它在我的真实代码中添加 1。如果 B 为真,我只需要一种方法对 A 做某事,如果 B 为负,我需要做其他事情。我实际上检查了存储在 A 中的时间是否正确。如果 B 为 True,则时间很好,如果为 False,我必须添加 +1 天,因为这一天从 23:59 变为 00:00 这就是我真正需要做的,但我认为这只会使事情复杂化我试图解释这一点。
    • @Pasgru 是同一个概念,使用df["B"] 作为条件,使用np.where 为“A”赋值。只需将df['A'].add(1) 替换为"df['A']",将df['A'].sub(2) 替换为"add +1 day"
    • 虽然我已经在这里超过 5 年了,但我仍然无法投票,因为没有足够的声誉 :') 但是接受了你的回答
    • 好了。你现在应该有足够的代表@Pasgru :)
    • 仅供参考:@enke 的答案可能更易读的版本是df['A'] = np.where(df['B'], df['A'] + 1, df['A'] - 2)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    相关资源
    最近更新 更多