J'ai le dataframe suivant:
actual_credit min_required_credit
0 0.3 0.4
1 0.5 0.2
2 0.4 0.4
3 0.2 0.3
J'ai besoin d'ajouter une colonne indiquant où actual_credit> = min_required_credit. Le résultat serait:
actual_credit min_required_credit result
0 0.3 0.4 False
1 0.5 0.2 True
2 0.4 0.4 True
3 0.1 0.3 False
Je fais ce qui suit:
df['result'] = abs(df['actual_credit']) >= abs(df['min_required_credit'])
Cependant, la 3e rangée (0,4 et 0,4) se traduit constamment par False. Après avoir étudié ce problème à divers endroits, notamment: Quelle est la meilleure façon de comparer les flottants pour une quasi-égalité en Python? Je n'arrive toujours pas à faire fonctionner cela. Chaque fois que les deux colonnes ont une valeur identique, le résultat est False, ce qui n'est pas correct.
J'utilise python 3.3
En raison d'une comparaison flottante imprécise, vous pouvez or
votre comparaison avec np.isclose
, isclose
prend un paramètre de tolérance relatif et absolu donc les éléments suivants devraient fonctionner:
df['result'] = df['actual_credit'].ge(df['min_required_credit']) | np.isclose(df['actual_credit'], df['min_required_credit'])
En général numpy
Comparaison les fonctions fonctionnent bien avec pd.Series
et permet des comparaisons par élément: isclose
, allclose
, greater
, greater_equal
, less
, less_equal
etc.
Dans ton cas greater_equal
ferait:
df['result'] = np.greater_equal(df['actual_credit'], df['min_required_credit'])
ou bien, comme proposé, en utilisant pandas.ge
(alternativement le
, gt
etc.):
df['result'] = df['actual_credit'].ge(df['min_required_credit'])
Le risque avec or
ing avec ge
(comme mentionné ci-dessus) est que par ex. comparant 3.999999999999
et 4.0
peut renvoyer True
qui n'est pas nécessairement ce que vous voulez.