108 votes

Pandas: créer deux nouvelles colonnes dans un cadre de données avec des valeurs calculées à partir d'une colonne préexistante

Je suis en train de travailler avec les pandas de la bibliothèque et je veux ajouter deux nouvelles colonnes à un dataframe df n colonnes (n > 0).
Ces nouvelles colonnes résultat de l'application d'une fonction à l'une des colonnes dans le dataframe.

La fonction à appliquer, c'est comme:

def calculate(x):
    ...operate...
    return z, y

Une méthode pour la création d'une nouvelle colonne pour une fonction retournant seulement une valeur est:

df['new_col']) = df['column_A'].map(a_function)

Donc, ce que je veux, et j'ai essayé unsuccesfully (*), est quelque chose comme:

(df['new_col_zetas'], df['new_col_ys']) = df['column_A'].map(calculate)

Quelle est la meilleure façon d'accomplir cela pourrait être ? J'ai scanné la documentation avec aucune idée.

*df['column_A'].map(calculate) renvoie un panda Série chaque élément composé d'un tuple z, y). Et en essayant de les assigner à deux dataframe colonnes produit un ValueError.

130voto

DSM Points 71975

Je n'utiliserais que zip :

 In [1]: from pandas import *

In [2]: def calculate(x):
   ...:     return x*2, x*3
   ...: 

In [3]: df = DataFrame({'a': [1,2,3], 'b': [2,3,4]})

In [4]: df
Out[4]: 
   a  b
0  1  2
1  2  3
2  3  4

In [5]: df["A1"], df["A2"] = zip(*df["a"].map(calculate))

In [6]: df
Out[6]: 
   a  b  A1  A2
0  1  2   2   3
1  2  3   4   6
2  3  4   6   9
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X