Skip to main content
 首页 » 编程设计

python之Pandas:按 ID 分组并删除包含最多 NaN 值的行

2025年05月04日14haluo1

我有一个 Pandas DataFrame,其中有几行具有相同的 ID。我想按 ID 对它们进行分组,并检查哪一行包含的 NaN(或零)值最少,然后删除其余的。

我希望我的最终 DataFrame 只包含每个 Id 一行和最大数量的信息,而不是每行迭代一行。

如果两行或更多行包含最少量的 NaN(或零)值,我将应用我尚未定义的第二个 bool 过滤器。它会是这样的:

初始表:

     ID      A      B      C      D      E 
1     4     56    NaN    890    aaa    907 
2     4    NaN    NaN    890    aaa    907 
3     7     89     78    754    bbb      1 
4     7     89    NaN    754    bbb      1 
5     7     89     78    754    bbb    NaN 

决赛 table :

     ID      A      B      C      D      E 
1     4     56    NaN    890    aaa    907 
3     7     89     78    754    bbb      1 

请您参考如下方法:

下面是将每行的 NaN 数量相加并在每组中采用 idxmin:

df.loc[df.isna().sum(1).groupby(df.ID).idxmin()] 
 
   ID     A     B    C    D      E 
1   4  56.0   NaN  890  aaa  907.0 
3   7  89.0  78.0  754  bbb    1.0