({"Closed",""}))) 用于获取数据框中-6ren">
gpt4 book ai didi

Python 相当于 excel 嵌套 if 用于过滤 Pandas DataFrame 行的条件

转载 作者:太空宇宙 更新时间:2023-11-04 04:16:37 26 4
gpt4 key购买 nike

使用 python 选择特定的 excel 行。所以在 excel 中我会做

If(And(Or(A<>({"Closed",""}),Or(B<>({"Closed",""})))

用于获取数据框中既非 Closed 也非空白的列。尝试使用

df = df[(~df.A.isin([Closed","No Data"])) &(~df.B.isin([Closed","No Data"]))]

问题是 python 正在删除列,例如:

A                        B
Approved Closed
No Data Restrict
Restrict No Data

我不想要正如其中一个链接中所建议的那样,也尝试过

df.loc[(df[A] != "Closed") & (df[B] != "Closed") & (df[A] != "No data") & (df[B] != "No data")

得到与我尝试 .isin 时相同的结果

最佳答案

我将使用此示例数据:

           A         B  ~df.A.isin  ~df.B.isin  ~A & ~B  ~A | ~B
0 Closed Closed False False False False
1 Closed No Data False False False False
2 Approved Closed True False False True
3 No Data No Data False False False False
4 Closed Approved False True False True
5 No Data Restrict False True False True
6 Approved No Data True False False True
7 Closed Restrict False True False True
8 Approved Approved True True True True
9 No Data Approved False True False True
10 Restrict No Data True False False True
11 Restrict Approved True True True True

~df.A.isin列显示 ~df.A.isin(["Closed","No Data"]) 的值,即 True对于 A 既不包含 Closed 的行也不No Data

~df.B.isin列显示 ~df.B.isin(["Closed","No Data"]) 的值,即 True对于 B 既不包含 Closed 的行也不No Data

~A & ~B列显示 (~df.A.isin(["Closed","No Data"])) &(~df.B.isin(["Closed","No Data"])) 的值

~A | ~B列显示 (~df.A.isin(["Closed","No Data"])) |(~df.B.isin(["Closed","No Data"])) 的值

您第一次尝试缺少 "Closed"的开头.添加它我们有

df[(~df.A.isin(["Closed","No Data"])) &(~df.B.isin(["Closed","No Data"]))]

这给了我们:

           A         B  ~df.A.isin  ~df.B.isin  ~A & ~B  ~A | ~B
8 Approved Approved True True True True
11 Restrict Approved True True True True

结果只显示那些完全没有 Closed 的行没有 No Data .

文本评论中的建议:

df[(~df.A.isin(["Closed","No Data"])) |(~df.B.isin(["Closed","No Data"]))]

给我们:

           A         B  ~df.A.isin  ~df.B.isin  ~A & ~B  ~A | ~B
2 Approved Closed True False False True
4 Closed Approved False True False True
5 No Data Restrict False True False True
6 Approved No Data True False False True
7 Closed Restrict False True False True
8 Approved Approved True True True True
9 No Data Approved False True False True
10 Restrict No Data True False False True
11 Restrict Approved True True True True

这里我们有| ( or ) 而不是 & ( and ),因此行可以包含 ClosedNo Data ,但不在 A 和 B 中。这意味着具有以下行:

       A         B
Approved Closed
No Data Restrict
Restrict No Data

将包括在内,但具有以下内容的行:

     A         B
Closed Closed
Closed No Data

你的第二次尝试:

df.loc[(df[A] != "Closed") & (df[B] != "Closed") &
(df[A] != "No data") & (df[B] != "No data")

需要在列标签周围加上引号。您可以使用 df.Adf['A'] , 但不是 df[A]

此外,您拼写了 dataNo data小写 d , 而在其他地方你用大写 D - No Data .在 python 中,这是不一样的。如果我们解决这个问题:

df.loc[(df['A'] != "Closed") & (df['B'] != "Closed") &
(df['A'] != "No Data") & (df['B'] != "No Data")]

这给了我们与第一次尝试相同的结果:

           A         B  ~df.A.isin  ~df.B.isin  ~A & ~B  ~A | ~B
8 Approved Approved True True True True True True True
11 Restrict Approved True True True True True True True

如果稍微重新排列此表达式,请使用括号和 | ( or ):

df.loc[((df['A'] != "Closed") & (df['A'] != "No Data")) | 
((df['B'] != "Closed") & (df['B'] != "No Data"))]

我们得到:

           A         B  ~df.A.isin  ~df.B.isin  ~A & ~B  ~A | ~B
2 Approved Closed True False False True
4 Closed Approved False True False True
5 No Data Restrict False True False True
6 Approved No Data True False False True
7 Closed Restrict False True False True
8 Approved Approved True True True True
9 No Data Approved False True False True
10 Restrict No Data True False False True
11 Restrict Approved True True True True

关于Python 相当于 excel 嵌套 if 用于过滤 Pandas DataFrame 行的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55284261/

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