我有一个Pandas DataFrame,其中有几行具有相同的ID。我想按ID对它们进行分组,然后检查哪一行包含的NaN值(或零)值最少,其余的丢弃。
我希望我的最终DataFrame每个ID只包含一行,并且信息的最大数量没有每行的迭代行。
如果两行或更多行包含最少数量的NaN(或零)值,我将应用第二个尚未定义的布尔过滤器。会是这样的:
初始表
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
最终表:
ID A B C D E
1 4 56 NaN 890 aaa 907
3 7 89 78 754 bbb 1
答案 0 :(得分:7)
这里是将每行NaNs
的数量加起来并在每个组中取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