我想通过使用多个布尔选择条件从数据框中删除某些行。这是我的测试数据框:
import pandas as pd
df = pd.DataFrame({'a':range(0,10,2), 'b':range(0,1000,200)})
df['c'] = 10*df.b
df
我可以使用以下单独的命令选择要删除的行:
df1 = df.ix[df.c>5000]
df2 = df1.ix[df1.b<800]
df2
让df2包含一行:
我希望能够使用一行看起来像这样的行来选择行:
df2 = (df.ix[df.c>5000]) & (df.ix[df1.b<800])
df2
但这不起作用。最后,当然我想把它变成一个删除命令。
答案 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)