Как удалить строки, если в них много NaN?

Есть фрейм вида:

 a   b   c    d
NaN  4  NaN  NaN
24   25  34  NaN
NaN  12 NaN  NaN
34  NaN  2    34
NaN NaN  19   11
42  NaN  29  NaN 
54  NaN  11   12

Нужно удалить из него строки, в которых число NaN превышает число столбцов с численными значениями или равно ему.

Желаемый результат:

 a   b   c    d
24   25  34  NaN
34  NaN  2    34
54  NaN  11   12

Мой код:

import pandas as pd
import numpy as np

df = pd.DataFrame([[np.NaN, 4, np.NaN, np.NaN], [24, 25, 34, np.NaN], [np.NaN, 12, np.NaN, np.NaN],
                   [34, np.NaN, 2, 34], [np.NaN, np.NaN, 19, 11], [42, np.NaN, 29, np.NaN], [54, np.NaN, 11, 12]])
df.rename({0: 'a', 1: 'b', 2: 'c', 3: 'd'}, axis=1, inplace=True)
columns_count = df.shape[1] # Считаем число столбцов
for row in df:
    NaN_count = 0
    for i in row:
        if i == None:
            NaN_count +=1
    if NaN_count >= columns_count:
        df = df.drop(index=[row]) # Удаляем строку
print(df)

Почему-то не удаляет строки.


Ответы (2 шт):

Автор решения: MaxU
threshold = df.shape[1] // 2

res = df.loc[df.isna().sum(axis=1).lt(threshold)]

результат:

In [13]: res
Out[13]:
      a     b     c     d
1  24.0  25.0  34.0   NaN
3  34.0   NaN   2.0  34.0
6  54.0   NaN  11.0  12.0
→ Ссылка
Автор решения: strawdog
res = df.dropna(thresh=len(df.columns)//2+1)

res:

      a     b     c     d
1  24.0  25.0  34.0   NaN
3  34.0   NaN   2.0  34.0
6  54.0   NaN  11.0  12.0
→ Ссылка