熊猫:按ID分组并删除包含最多NaN值的行

时间:2019-09-19 08:41:08

标签: python pandas dataframe

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

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