繁体   English   中英

如果 pandas dataframe 中的一列缺少数据,则删除一组行

[英]Drop a group of rows if one column has missing data in a pandas dataframe

我有以下 dataframe:

df

          Group       Dist
    0     A             5
    1     B             2
    2     A             3
    3     B             1
    4     B             0
    5     A             5

如果Dist列为零,我将尝试删除与Group匹配的所有行。 这适用于删除第 4 行:

df = df[df.Dist != 0]

但是我也想删除第 1 行和第 3 行,所以我只剩下:

df
          Group       Dist
    0     A             5
    2     A             3
    5     A             5

关于如何根据这种情况删除组的任何想法?

谢谢!

首先获取Entry == 0的所有Group值,然后通过检查带有反转掩码的列Group通过~过滤掉它们:

df1 = df[~df['Group'].isin(df.loc[df.Dist == 0, 'Group'])]
print (df1)
  Group   Dist
0     A      5
2     A      3
5     A      5

或者您可以使用GroupBy.transformGroupBy.all来测试组是否没有0值:

df1 = df[(df.Dist != 0).groupby(df['Group']).transform('all')]

编辑:对于删除所有缺少值的组:

df2 = df[df['Dist'].notna().groupby(df['Group']).transform('all')]

对于测试缺失值:

print (df[df['Dist'].isna()])

如果什么都不返回,则没有缺失值NaN或没有None之类的 Nonetype。

因此可以检查标量,例如,如果该值在索引为10的行中:

print (df.loc[10, 'Dist'])
print (type(df.loc[10, 'Dist']))

您可以使用groupby和方法filter

df.groupby('Group').filter(lambda x: x['Dist'].ne(0).all())

Output:

  Group  Dist
0     A     5
2     A     3
5     A     5

如果要过滤掉具有缺失值的组:

df.groupby('Group').filter(lambda x: x['Dist'].notna().all())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM