如何在组中查找缺失值

How to find missing values in groups

我有一个很大的餐厅检查数据集。一次检查将触发多次代码违规。我想知道是否有任何检查不包含特定的代码违规(用于害虫的证据)。我的数据在 Pandas 数据框中。

我尝试根据是否包含害虫违规来分离数据框。我试着按违规代码分组。似乎无法弄清楚。

害虫违规为“3A”,数据可能如下所示:

import pandas as pd

df = pd.DataFrame(data = {
    'visit' : ['1', '1', '1', '2', '2', '3', '3'],
    'violation' : ['3A', '4B', '5C', '3A', '6C', '7D', '8E']
    })
  visit violation
0     1        3A
1     1        4B
2     1        5C
3     2        3A
4     2        6C
5     3        7D
6     3        8E

我想这样结束:

result = pd.DataFrame(data = {
    'visit' : ['3', '3'], 'violation' : ['7D', '8E']
    })
Out[15]: 
  visit violation
0     3        7D
1     3        8E

尝试使用:

value = '3A'
print(df.groupby('visit').filter(lambda x: all(value != i for i in x['violation'])))

输出:

  violation visit
5        7D     3
6        8E     3

另一种方法是:

violation_visits = df[df['violation']=='3A']['visit'].unique()
df[~df['visit'].isin(violation_visits.tolist())]

Out[16]: 
  visit violation
5     3        7D
6     3        8E

一种使用过滤器的方法

df.groupby('visit').filter(lambda x : ~x['violation'].eq('3A').any())
  visit violation
5     3        7D
6     3        8E

另一种使用方式 transform

df[df.violation.ne('3A').groupby(df.visit).transform('all')]
  visit violation
5     3        7D
6     3        8E