Pandas .assign() problème pour créer des colonnes + filtering etc, et duplication dataframe
Salut,
Je n'arrive pas à trouver d'exemples sur internet donc je viens ici.
Je souhaite utiliser la fonction .assign() pour faire plusieurs choses en même temps :
- Créer des colonnes
- Filtrer (sortir certaines lignes et pas d'autres)
- Renommer des colonnes
- Trier
- Et d'autres choses
Ça, je sais le faire avec Python. Je ne sais pas exactement si c'est Pandas ou pas, mais je sais le faire.
J'ai plus ou moins la même erreur quelle que soit l'action que j'ai envie de faire, alors je donne ce petit exemple :
Code:
1 2 3 4 5 6 7 8 9 10
|
pdassign1.assign(
# Numeric
AGEM = lambda x: x['AGE']*12,
AGED = lambda x: x['AGE']*365.25
).assign(
pdassign1.rename(columns={'AGE':'AgEY'}, inplace=True)
)
display(pdassign1) |
J'obtiens cette erreur :
Code:
1 2 3 4 5 6 7 8 9 10
| ---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-31-ad47a6623bf3> in <module>
6 AGED = lambda x: x['AGE']*365.25
7 ).assign(
----> 8 pdassign1.rename(columns={'AGE':'AgEY'}, inplace=True)
9 )
10
TypeError: assign() takes 1 positional argument but 2 were given |
Que je fais le premier assign seulement ça fonctionne, mais pas ensuite.
Ce que je veux notamment faire, et que je ne trouve pas sur internet, c'est créer une colonne à plusieurs modalités. en .assign(), je trouve des exemples pour créer des colonnes binaires True False mais ça n'est pas ce que je veux. Je voudrais appliquer la logique du ELSE IF avec une ou numpy.selec() mais je n'y arrive pas.
En parlant de ça, est-ce que vous savez si avec une fonction ROW basée sur des ELIF je peux crée plusieurs colonnes d'un coup ?
Un exemple type :
- J'ai l'âge
- Je veux créer deux variables : AGE en groupe (10-20, 21-30 etc), et une variable AGE code numérique pour associer 10-20 à 1, 21-30 à 2, etc.
J'en profite pour parler d'un autre problème que j'ai. Je copie des dataframes pour faire des modifications en conservant le DF d'origine mais quand je fais le code suivant par exemple, tmp_dm et rd_dm voient la colonne AGE renommée en AgEY. Il y a quelque chose que je n'ai pas compris encore.
Code:
1 2 3 4 5
| tmp_dm=rd_dm
tmp_dm.rename(columns={'AGE':'AgEY'}, inplace=True)
display(tmp_dm)
display(rd_dm) |
Auriez-vous des pistes pour moi ?
Merci !
alers