【问题标题】:How to remove rows that have all NaN values for a specific value in another column?如何删除在另一列中具有特定值的所有 NaN 值的行?
【发布时间】:2021-07-30 06:27:56
【问题描述】:

我有这个df

         CODE    MONTH_DAY TMAX_x
0        113250   01-01    nan
1        113250   01-02    nan
2        113250   01-03    nan
3        113250   01-04    nan
4        113250   01-05    nan
        ...     ...     ...
16975  47E94706   12-27    22.4
16976  47E94706   12-28    21.1
16977  47E94706   12-29    23.2
16978  47E94706   12-30    24.9
16979  47E94706   12-31    24.4

[16980 rows x 3 columns]

我想删除在 CODE 列中具有特定代码值的行,前提是它们的所有 TMAX_x 值都是 nan。

例如:如果 CODE 等于 133250 的所有行在 TMAX_x 中只有 nan 值,我必须删除这些行。 (对于特定的CODE 值,TMAX_x 列中必须有所有值 nan,如果至少 1 个值与 TMAX_x 中的 nan 不同,我不得删除任何行。

预期结果:

         CODE    MONTH_DAY TMAX_x
        ...     ...     ...
16975  47E94706   12-27    22.4
16976  47E94706   12-28    21.1
16977  47E94706   12-29    23.2
16978  47E94706   12-30    24.9
16979  47E94706   12-31    24.4

提前致谢。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以使用groupby 后跟filter 来保留在 TMAX_x 列中至少有一个非空值的组:

    df.groupby('CODE').filter(lambda gp: gp.TMAX_x.notna().any())
    

    【讨论】: