使用多个条件选择行

时间:2016-04-28 21:26:17

标签: python pandas delete-row

我想通过使用多个布尔选择条件从数据框中删除某些行。这是我的测试数据框:

import pandas as pd

df = pd.DataFrame({'a':range(0,10,2), 'b':range(0,1000,200)})
df['c'] = 10*df.b
df

enter image description here

我可以使用以下单独的命令选择要删除的行:

df1 = df.ix[df.c>5000]
df2 = df1.ix[df1.b<800]
df2

让df2包含一行:

enter image description here

我希望能够使用一行看起来像这样的行来选择行:

df2 = (df.ix[df.c>5000]) & (df.ix[df1.b<800])
df2

但这不起作用。最后,当然我想把它变成一个删除命令。

3 个答案:

答案 0 :(得分:1)

为了根据您尝试在描述中应用的条件进行选择,请尝试使用布尔索引:

>> condition = (df.c > 5000) & (df.b < 800)
>> df2 = df[condition]

并且为了删除,使用相同的条件,您可以这样做:

>> df.drop(df[condition].index.tolist())

这将返回pd.core.frame.DataFrame,您需要在此处指定或使用inplace这样的标记:

>> df.drop(df[condition].index.tolist(), inplace=True)

我希望这有帮助!

答案 1 :(得分:1)

如果你想删除掉行,而不是保留它,你可以用~运算符反转你的布尔向量。

df2 = df[~((df.c > 5000) & (df.b < 800))]

答案 2 :(得分:1)

您可以通过

获取要删除的索引
indices = df[(df.c > 5000) & (df.b < 800)].index

并将其删除,如(inplace):

df.drop(indices, inplace=True)

如果您还想重置索引,请执行

df = df.drop(indices).reset_index(drop=True)