我有一个很大的餐馆检查数据集。一次检查将触发多个代码违规。我想找出是否有任何检查不包含特定的代码违规(作为有害程序的证据)。我把数据放在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发布于 2019-07-23 11:06:40
尝试使用:
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发布于 2019-07-23 11:08:59
另一种方法是:
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发布于 2019-07-23 11:15:11
使用过滤器的一种方式
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 8Ehttps://stackoverflow.com/questions/57156056
复制相似问题