根据特定集合列(panda)上缺少的值筛选行



我有如下所示的数据帧

ID       Type         Desc         D_N    D_A    C_N     C_A
1        Edu          Education    3      100    NaN     NaN
1        Bank         In_Pay       NaN    NaN    NaN     900
1        Eat          Food         4      200    NaN     NaN
1        Edu          Education    NaN    NaN    NaN     NaN
1        Bank         NaN          NaN    NaN    4       700
1        Eat          Food         NaN    NaN    NaN     NaN
2        Edu          Education    NaN    NaN    1       100
2        Bank         NaN          NaN    NaN    8       NaN
2        NaN          Food         4      NaN    NaN     NaN
3        Edu          Education    NaN    NaN    NaN     NaN
3        Bank         NaN          2      300    NaN     NaN
3        Eat          Food         NaN    140    NaN     NaN

根据上面的df,我想过滤列D_ND_AC_NC_A中恰好有一列为非零的行。

预期输出:

ID       Type         Desc         D_N    D_A    C_N     C_A
1        Bank         In_Pay       NaN    NaN    NaN     900
2        Bank         NaN          NaN    NaN    8       NaN
2        NaN          Food         4      NaN    NaN     NaN
3        Eat          Food         NaN    140    NaN     NaN

我尝试了下面的代码,但不起作用。

df[df.loc[:, ["D_N", "D_A", "C_N", "C_A"]].isna().sum(axis=1).eq(1)]

对计数值使用DataFrame.count排除缺失值:

df1 = df[df[["D_N", "D_A", "C_N", "C_A"]].count(axis=1).eq(1)]
print (df1)
ID  Type    Desc  D_N    D_A  C_N    C_A
1    1  Bank  In_Pay  NaN    NaN  NaN  900.0
7    2  Bank     NaN  NaN    NaN  8.0    NaN
8    2   NaN    Food  4.0    NaN  NaN    NaN
11   3   Eat    Food  NaN  140.0  NaN    NaN

您的解决方案可以通过测试非缺失值进行修改:

df1 = df[df[["D_N", "D_A", "C_N", "C_A"]].notna().sum(axis=1).eq(1)]

最新更新