Pandas 根据多个条件过滤行

新手上路,请多包涵

我在---- Medium risk 列都不是 Small High 我想删除值不是 SmallMediumHigh 的行。我尝试了以下内容:

 df = df[(df.risk == "Small") | (df.risk == "Medium") | (df.risk == "High")]

但这会返回一个空的 DataFrame。如何正确过滤它们?

原文由 ArtDijk 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 404
2 个回答

我想你想要:

 df = df[(df.risk.isin(["Small","Medium","High"]))]

例子:

 In [5]:
import pandas as pd
df = pd.DataFrame({'risk':['Small','High','Medium','Negligible', 'Very High']})
df

Out[5]:

         risk
0       Small
1        High
2      Medium
3  Negligible
4   Very High

[5 rows x 1 columns]

In [6]:

df[df.risk.isin(['Small','Medium','High'])]

Out[6]:

     risk
0   Small
1    High
2  Medium

[3 rows x 1 columns]

原文由 EdChum 发布,翻译遵循 CC BY-SA 3.0 许可协议

另一个不错且可读的方法如下:

 small_risk = df["risk"] == "Small"
medium_risk = df["risk"] == "Medium"
high_risk = df["risk"] == "High"

然后你可以像这样使用它:

 df[small_risk | medium_risk | high_risk]

或者

df[small_risk & medium_risk]

原文由 Rafael 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题