【问题标题】:multiple condition row dropping多条件行删除
【发布时间】:2020-04-25 13:16:25
【问题描述】:

我想选择满足以下条件的数据框子集:我有一个数据框,它显示了三个学生的不同测试结果。一旦其中一名学生得到“差”的结果,他们就不能被考虑参加实验,需要从数据集中删除。我的数据框如下所示:

import pandas as pd

data = {'Name':  ['Peter', 'Peter','Anna', 'Anna','Anna', 'Max'],
        'Result': ["Good", "Good", "Good", "Good", "poor", "Very Good"],
         }

df = pd.DataFrame (data, columns = ['Name','Points'])

这意味着我首先需要查看谁做得不好,然后删除包含该 Person 的每一行。在这个例子中我想要的结果是:

df_res = pd.DataFrame({'Name': ('Peter', 'Peter', 'Max', 'Max'), 
                   'Result': ("Good", "Good", "Very Good")}) 

有人可以帮我吗?特别是删除其中所有具有相应名称的行对我来说是一个障碍。

【问题讨论】:

  • 使用min('Points')groupBy('Name')获取每个学生的最低分数,然后返回最低分数为< 20的分数。最后,使用它来过滤原始数据框。
  • 非常感谢您的回答,我应该更准确。我稍微更改了示例,因此 min 函数不起作用。
  • 请参阅stackoverflow.com/questions/35445132/…,了解如何查找包含特定值的组。
  • 您不需要columns 参数来构建数据框。它还会干扰构建数据框。

标签: python pandas dataframe multiple-columns drop


【解决方案1】:

在具有'poor'Result 的项目中查找Names,然后使用它来过滤Names 不在该列表中的记录。

>>> df = pd.DataFrame(data) # leave out the columns parameter.
>>>
>>> df[~df.Name.isin(df[df.Result == 'poor'].Name.values)]
    Name     Result
0  Peter       Good
1  Peter       Good
5    Max  Very Good

“布尔掩码”我想我们称之为。

我们对安娜是不是有点不公平——她的成绩比其他人都好。那又怎样——她今天过得很糟糕……

=) 无论如何...

你也可以专门使用.drop()方法:

>>> df.drop(index=df[df.Name.isin(df[df.Result == 'poor'].Name)].index)
    Name     Result
0  Peter       Good
1  Peter       Good
5    Max  Very Good

【讨论】:

  • 非常感谢!别担心,这只是一个假设的例子;)
  • 这让人松了口气……我们不是都曾经是安娜吗……被系统过滤掉了……只是连续的另一个条目……=P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-08
  • 1970-01-01
  • 2019-12-13
  • 2015-05-29
  • 2014-11-09
  • 2020-08-18
  • 1970-01-01
相关资源
最近更新 更多