首页 > 解决方案 > 比较不完整单元格的组

问题描述

我有一个包含一些不完整记录的数据框,例如:

    fname lname   loc   
0     a      z    UK      
1     b      k    USA     
2     a      z            
3     c      p    DE      
4     a      z    EU      
5     b      k            
6     b      k            
7     a      z    ENG     
8     c      p    DE      

对于每对 fname 和 lname,我想将丢失的 loc 与其他现有 loc 进行比较。因此,我使用 groupby 函数首先将相似的 fname 和 lname 分组为一对,并为每个分配一个组号。

    fname lname   loc   ngroup
0     a      z    UK      0
1     b      k    USA     1
2     a      z            0
3     c      p    DE      2
4     a      z    EU      0
5     b      k            1
6     b      k            1
7     a      z    ENG     0
8     c      p    DE      2

现在有完整的组,例如 ngroup 2,其中我们有所有 fname 和 lname 对的 loc 值。但其他组 0 和 1 的 loc 值缺失或冲突。我的兴趣是在一个大型数据框中比较这些组中的每一个,以找出不一致和进一步的插补。

有没有办法只过滤空白 loc 组的数据帧并跳过完整的组?

标签: python-3.xpandasdataframepandas-groupby

解决方案


您可以使用DataFrameGroupBy.filter

>>> df.groupby(["fname", "lname"]).filter(lambda gr: gr["loc"].eq("").any())

  fname lname  loc
0     a     z   UK
1     b     k  USA
2     a     z
4     a     z   EU
5     b     k
6     b     k
7     a     z  ENG

对于每个组,这仅保留其locequal 的那些,""即行的空字符串any


推荐阅读