【问题标题】:How to find missing values in groups如何在组中查找缺失值
【发布时间】:2019-12-01 00:31:33
【问题描述】:

我有一个大型餐厅检查数据集。一项检查将触发多个代码违规。我想知道是否有任何检查不包含特定的违规行为(用于害虫的证据)。我在 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

【问题讨论】:

  • 我不明白逻辑
  • 相同的“访问”号码将出现在具有不同“违规”代码的几行中。同一个“访问”中是否有任何集合不包含“3A”的“违规”代码?
  • 我已经回答了

标签: python pandas distinct-values


【解决方案1】:

尝试使用:

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

【讨论】:

    【解决方案2】:

    另一种方法是:

    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
    

    【讨论】:

      【解决方案3】:

      一种使用过滤器的方法

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-10
        • 2014-11-03
        • 2012-07-12
        相关资源
        最近更新 更多