1
votes

Comment appliquer une fonction à toutes les colonnes d'une trame de données et prendre une sortie sous forme de trame de données en python

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


1 commentaires

pouvez-vous expliquer la sortie? affichez également la fonction qui réalise la sortie


3 Réponses :


0
votes

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.


1 commentaires

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)



2
votes

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


0 commentaires

0
votes

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


0 commentaires