gpt4 book ai didi

python - df.loc 超过 2 个条件

转载 作者:太空宇宙 更新时间:2023-11-03 13:07:22 26 4
gpt4 key购买 nike

我有一个像这样的 Pandas 数据框:

df = pd.DataFrame({"A": [1, 2, 3, 4, 5, 6], "B": [100, 200, 300, 400, 500, 
600]})

如果满足某些条件,我想创建一个具有某些值的新列。问题是:这些是 &| 的多个条件。我知道我可以只用两个条件然后多次调用 df.loc 来做到这一点,但由于我的实际数据集非常庞大,变量可以采用许多不同的值,我想知道它是否可以在一次 df.loc 调用中执行此操作。我之前也尝试过 np.where,但发现 df.loc 通常更容易,所以如果我能坚持下去就好了。

我试过的代码是

df.loc[(df.A == 1) | (df.A == 2) & (df.B == 600) | (df.B == 200), "C"] = 
"1or2and600or200"

这给了我

print(df)  
A B C
0 1 100 1or2and600or200
1 2 200 1or2and600or200
2 3 300 NaN
3 4 400 NaN
4 5 500 NaN
5 6 600 NaN

但这不是我想要的,因为 df.loc 可能只考虑前两个条件。因此,在此代码示例中,我希望值 1or2and600or200 仅位于第一行,而不是第二行。这可能吗?

非常感谢。

最佳答案

一切都很好,除了你需要注意额外的括号。

df.loc[((df.A == 1) | (df.A == 2)) & ((df.B == 600) | (df.B == 200)), "C"] = "1or2and600or200"

您还可以继续使用 .isin 以获得@AndrewF 所引用的更清晰简洁的图片

df.loc[df.A.isin([1, 2]) & df.B.isin([600, 200]), 'C'] = "1or2and600or200"

此外,对于您给定的条件,它会出现在第二行,因为它是您在 B 中有 200 的地方

关于python - df.loc 超过 2 个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54234786/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com