Pandas:如何根据列表从数据框中删除行?

时间:2017-04-07 04:18:11

标签: python pandas dataframe

我的数据框客户有一些“坏”行,此数据框中的键是CustomerID。我知道我应该放弃这些行。我有一个名为 badcu 的列表,其中显示Boolean isSDPresent = android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED); 每个值对应一个不同的“坏”客户。

然后我有另一个数据框,我们称之为销售,所以我想删除所有不良客户的记录, badcu 列表中的记录。

如果我执行以下操作

[23770, 24572, 28773, ...]

我得到了一个数据帧,其中包含我想要丢弃的记录,但是如果我做了

sales[sales.CustomerID.isin(badcu)]

它返回一个数据帧,第一行被删除(这是一个合法的命令),其余的行完好无损(它不会删除坏的),我想我知道为什么会这样,但我仍然不喜欢我不知道如何丢弃不正确的客户ID行。

3 个答案:

答案 0 :(得分:16)

你需要

new_df = sales[~sales.CustomerID.isin(badcu)]

答案 1 :(得分:4)

您也可以使用query

sales.query('CustomerID not in @badcu')

答案 2 :(得分:2)

我认为最好的方法是按索引删除,尝试并让我知道

sales.drop(sales[sales.CustomerId.isin(badcu)].index.tolist())