Je voudrais supprimer toutes les lignes pandas où les valeurs dans deux colonnes sont proches les unes des autres dans une certaine plage prédéfinie.
Par exemple:
df = pd.DataFrame({'a':[1,2,3,4,5,6], \
'b':[20.02,19.96,19.98,20.10,26.75,56.12],\
'c':[10.12,10.10,123.54,124.12,245.12,895.21]})
a b c
1 20.02 10.12
2 19.96 10.10
3 19.98 123.54
4 20.10 124.12
5 26.75 245.12
6 56.12 895.21
Filtrer les lignes en fonction des colonnes b et c: si les valeurs actuelles de b
et c
sont proches (dans les 1% de) des valeurs de la ligne précédemment acceptée:
(0.99*previous_b < b < 1.01*previous_b) && (0.99*previous_c < c < 1.01*previous_c)
alors elles sont exclues.
Résultat
a b c
1 20.02 10.12
3 19.98 123.54
5 26.75 245.12
6 56.12 895.21
Je peux utiliser numpy.isclose pour un nombre:
df['b'].apply(np.isclose, b=20.02, atol=0.01 * 20.02)
Comment puis-je généraliser cela pour appliquer cela de manière itérative en parcourant toutes les colonnes pandas et appliquer cette condition sur deux colonnes différentes?
Note latérale: J'ai deux millions de lignes dans mon dataframe pandas. Par conséquent, je voudrais connaître la manière la plus efficace de le faire.