如何在组中查找缺失值
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
我有一个很大的餐厅检查数据集。一次检查将触发多次代码违规。我想知道是否有任何检查不包含特定的代码违规(用于害虫的证据)。我的数据在 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