首页 > 解决方案 > 如果熊猫数据框中的一列缺少数据,则删除一组行

问题描述

我有以下数据框:

df

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

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

df = df[df.Dist != 0]

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

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

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

谢谢!

标签: pythonpandas

解决方案


首先获取所有GroupEntry == 0,然后通过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.transformwith进行测试:GroupBy.all0

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。

因此可以检查标量,例如,如果该值与 index 在行中10

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

推荐阅读