基于 Pandas 的条件删除行

13

我有以下数据框:

In [62]: df
Out[62]:
            coverage   name  reports  year
Cochice           45  Jason        4  2012
Pima             214  Molly       24  2012
Santa Cruz       212   Tina       31  2013
Maricopa          72   Jake        2  2014
Yuma              85    Amy        3  2014

基本上我可以按照以下方式筛选行:

df[df["coverage"] > 30

我可以按照下面的方法删除一行数据:

df.drop(['Cochice', 'Pima'])

但是我想根据条件删除若干行,我该怎么做呢?


你能详细解释一下你的情况吗? - jezrael
如果覆盖率列的值小于72,我想删除行。 - Shiva Krishna Bavandla
然后使用布尔索引 - df[df["coverage"] >= 72] - jezrael
是的,我明白了,只是好奇是否可以获得更多的方法,所以在这里发布了 :) - Shiva Krishna Bavandla
2个回答

18

最好的方法是布尔索引,但需要反转条件——获取所有值等于或高于72

print (df[df["coverage"] >= 72])
            coverage   name  reports  year
Pima             214  Molly       24  2012
Santa Cruz       212   Tina       31  2013
Maricopa          72   Jake        2  2014
Yuma              85    Amy        3  2014

它和 ge 函数相同:

print (df[df["coverage"].ge(72)])
            coverage   name  reports  year
Pima             214  Molly       24  2012
Santa Cruz       212   Tina       31  2013
Maricopa          72   Jake        2  2014
Yuma              85    Amy        3  2014

另一个可能的解决方案是通过 ~ 反转掩码:

print (df["coverage"] < 72)
Cochice        True
Pima          False
Santa Cruz    False
Maricopa      False
Yuma          False
Name: coverage, dtype: bool

print (~(df["coverage"] < 72))
Cochice       False
Pima           True
Santa Cruz     True
Maricopa       True
Yuma           True
Name: coverage, dtype: bool


print (df[~(df["coverage"] < 72)])
            coverage   name  reports  year
Pima             214  Molly       24  2012
Santa Cruz       212   Tina       31  2013
Maricopa          72   Jake        2  2014
Yuma              85    Amy        3  2014

2
我们也可以使用pandas.query()功能。
import pandas as pd 

dict_ = {'coverage':[45,214,212,72,85], 'name': ['jason','Molly','Tina','Jake','Amy']}
df  = pd.DataFrame(dict_)

print(df.query('coverage > 72'))

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接