我有一个 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
