J'ai des valeurs dupliquées dans mon DF, mais une des observations a beaucoup de NANS. Je voudrais garder la valeur dupliquée qui a la valeur manquante la plus faible.
Des idées Comment faire cela? P>
Ceci est un exemple de mon df: p> dans cet exemple, je voudrais garder seulement la première observation et le 6ème. p> merci p> p>
3 Réponses :
Vous pouvez déposer n'importe quelle ligne avec un certain nombre de nans avec les éléments suivants:
df = df.dropna(axis=0, thresh=4) # drop any row that has at least 4 non-nans within it.
Vous pouvez utiliser Assurez-vous que les valeurs manquantes sont df.isna (). somme (axe = 1) code> pour compter la quantité de nans code> par ligne, puis groupby code> id et sélectionnez la ligne avec moins nans code> en utilisant idxmin code> : nans code> comme vous avez spécifié, Sinon, commencez par: P> df.replace('.',np.nan)
yup c'est beaucoup mieux que le mien
Une approche différente qui fait plus que ce que vous avez demandé. Ceci est si certaines valeurs manquantes dans une rangée et différentes sont manquantes dans une autre ligne et vous souhaitez les combiner pour obtenir plus d'informations complètes: Notez que l'exemple DF est légèrement différent de celui de Votre question donc de montrer où cette approche serait meilleure. p> pour ID 1, c'est la même chose que de prendre la première rangée. Mais pour ID 2, il est en mesure de remplir toutes les valeurs, où vos (ou les autres réponses) prendraient une seule rangée, qui aspiraient toutes. P> évidemment, cela suppose que les valeurs qui ne sont pas < Code> Nan Code> Restez le même. S'ils ne le font pas, seules les premières occurrences de NaN dans cette colonne seront prises. P> p>
Est-il déjà garanti que
['b', 'c', 'd'] code> est dupliqué (avec votre définition de défaut) dans'id' code> ou avez-vous également besoin de Vérifier que la duplication avant de tomber