繁体   English   中英

Python pandas:使用 ~df.type.isin 和 != 的多列过滤器

[英]Python pandas: Multi-column filter using ~df.type.isin and !=

我是 python 的新手,我正在学习 python 为我的业务自动化一些 excels 工作流程。

df = pd.DataFrame({ "Index": list(range(8)),
                    "Name": ["Joe", "Tom", "Joe", "Tom", "Joe", "Tom", "Joe", "Tom"],
                    "Age": [23, 54, 34, 42, 23, 54, 42, 42]})

   Index Name  Age
0      0  Joe   23
1      1  Tom   54
2      2  Joe   34
3      3  Tom   42
4      4  Joe   23
5      5  Tom   54
6      6  Joe   42
7      7  Tom   42

我正在尝试返回 Not "Tom" AND Not "42" 的数据,也就是说我想过滤掉第 3 行和第 7 行,同时保留 rest。

我使用以下代码尝试过滤掉不是 Tom AND 不是 42 的行。

df = df[(df.Name != "Tom") & (df.Age != 42)]

df = df[~df.Name.isin(["Tom"]) & ~df.Age.isin([42])]

但是,我得到的 output 是:

   Index Name  Age
0      0  Joe   23
2      2  Joe   34
4      4  Joe   23

但是,我想要的 output 是:

   Index Name  Age
0      0  Joe   23
1      1  Tom   54
2      2  Joe   34
4      4  Joe   23
5      5  Tom   54
6      6  Joe   42

有什么建议么? 谢谢

你非常接近你需要的东西。

df = df[~((df['Name']=='Tom') & (df['Age']==42))]

print(df)

   Index Name  Age
0      0  Joe   23
1      1  Tom   54
2      2  Joe   34
4      4  Joe   23
5      5  Tom   54
6      6  Joe   42

在这种情况下,它应该不是“汤姆”或不是“42”

df = df[(~(df.Name=="Tom")) | (~(df.Age==42))]
print(df)
   Index Name  Age
0      0  Joe   23
1      1  Tom   54
2      2  Joe   34
4      4  Joe   23
5      5  Tom   54
6      6  Joe   42

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM