Une UDF (fonction définie par l'utilisateur) permet d'appliquer du code Python à des colonnes quand aucune fonction native ne convient. Elle est opaque pour l'optimiseur et lente, car chaque ligne est sérialisée vers Python. Une pandas UDF travaille par lots via Apache Arrow et est nettement plus rapide.
Exemple
@F.udf('string')
def nettoyer(s): return s.strip().lower()