J'ai deux fonctions qui font des calculs et me donnent des résultats. Pour l'instant, je suis capable de l'appliquer dans une colonne et d'obtenir le résultat sous la forme d'un dataframe. J'ai besoin de savoir comment je peux appliquer la fonction sur toutes les colonnes du dataframe et obtenir des résultats également sous la forme d'un dataframe.
Disons que j'ai un data frame comme ci-dessous et que je dois appliquer la fonction sur chaque colonne dans le bloc de données et obtenez un cadre de données avec les résultats correspondant à toutes les colonnes.
A B C D E F 2110 9058 684530 2530 66285 8200 1529 2967 711195 2501 5835 16620 7750 8054 40195 810 8510 10250 85529 16063 3689 7452 10421 65787
Résultats
A B C D E F 1456 6744 9876 374 65413 1456 654 2314 674654 2156 872 6744 875 653 36541 345 4963 9876 6875 7401 3654 465 3547 374 78654 8662 35 6987 6874 65413 658 94512 687 489 8756 5854
3 Réponses :
L'objet
pd.DataFrame
possède également son propre apply
method .
De l'exemple donné dans la documentation du lien ci-dessus:
>>> df.apply(np.sqrt) A B 0 2.0 3.0 1 2.0 3.0 2 2.0 3.0
XXX
Conclusion : vous devriez pouvoir appliquer votre fonction à l'ensemble du dataframe.
Eh bien, la fonction d'OP fonctionne, la méthode apply
fonctionne sur n'importe quelle fonction donnée, donc cela devrait fonctionner, vous ne pensez pas? Je soupçonne juste que OP vient d'essayer sur une pd.Series
comme: df ["A"]. Apply (my_func)
Voici un exemple simple
df1 = df.applymap(lambda x: mul(x, 3)) df1 A B C D 0 30 33 36 39 1 60 63 66 69 2 90 93 96 99 3 120 123 126 129
qui multipliera les valeurs
Disons que vous voulez multiplier la première colonne 'A' par 3
df['A'].apply(lambda x: mul(x,3)) 0 30 1 60 2 90 3 120
Maintenant, vous voulez appliquer la fonction mul à toutes les colonnes du dataframe et créer un nouveau dataframe avec des résultats
df A B C D 0 10 11 12 13 1 20 21 22 23 2 30 31 32 33 3 40 41 42 43 # Assume your user defined function is def mul(x, y): return x * y
Il semble que c'est ce que vous essayez de faire dans votre sortie:
>>> df.apply(fn) A B C D E F 0 2110 9058 684530 2530 66285 8200 1 1529 2967 711195 2501 5835 16620 2 7750 8054 40195 810 8510 10250 3 85529 16063 3689 7452 10421 65787
Appliquez la fonction comme mentionné dans les réponses précédentes:
df = pd.DataFrame( [[1456, 6744, 9876, 374, 65413, 1456], [654, 2314, 674654, 2156, 872, 6744], [875, 653, 36541, 345, 4963, 9876], [6875, 7401, 3654, 465, 3547, 374], [78654, 8662, 35, 6987, 6874, 65413], [658, 94512, 687, 489, 8756, 5854]], columns=list('ABCDEF')) def fn(col): return col[:-2].values + col[1:-1].values
pouvez-vous expliquer la sortie? affichez également la fonction qui réalise la sortie