Supposons que j'ai un df
qui a des colonnes de 'ID', 'col_1', 'col_2'
. Et je définis une fonction :
f = lambda x, y : my_function_expression
.
Maintenant, je veux appliquer le f
à df
Les deux colonnes de l'article 'col_1', 'col_2'
pour calculer par éléments une nouvelle colonne 'col_3'
, un peu comme :
df['col_3'] = df[['col_1','col_2']].apply(f)
# Pandas gives : TypeError: ('<lambda>() takes exactly 2 arguments (1 given)'
Comment faire ?
** Ajouter un échantillon détaillé comme ci-dessous ***
import pandas as pd
df = pd.DataFrame({'ID':['1','2','3'], 'col_1': [0,2,3], 'col_2':[1,4,5]})
mylist = ['a','b','c','d','e','f']
def get_sublist(sta,end):
return mylist[sta:end+1]
#df['col_3'] = df[['col_1','col_2']].apply(get_sublist,axis=1)
# expect above to output df as below
ID col_1 col_2 col_3
0 1 0 1 ['a', 'b']
1 2 2 4 ['c', 'd', 'e']
2 3 3 5 ['d', 'e', 'f']
4 votes
pouvez-vous appliquer f directement aux colonnes : df['col_3'] = f(df['col_1'],df['col_2'])
1 votes
Il serait utile de savoir ce que
f
fait2 votes
non, df['col_3'] = f(df['col_1'],df['col_2']) ne fonctionne pas. Car f n'accepte que les entrées scalaires, pas les entrées vectorielles. OK, vous pouvez supposer que f = lambda x,y : x+y . (bien sûr, mon f réel n'est pas aussi simple, sinon je peux directement df['col_3'] = df['col_1'] + df['col_2'] )
2 votes
J'ai trouvé une question connexe à l'url ci-dessous, mais mon problème est de calculer une nouvelle colonne par deux colonnes existantes, et non pas 2 à partir de 1 . stackoverflow.com/questions/12356501/
0 votes
Je pense que ma réponse stackoverflow.com/a/52854800/5447172 répond à cette question de la manière la plus pythonique / pandanique qui soit, sans contournement ni indexation numérique. Il produit exactement la sortie que vous avez demandée dans votre exemple.
0 votes
J'ai suggéré une
map
pour ce faire : github.com/pandas-dev/pandas/issues/20807 N'hésitez pas à en faire la demande ou à proposer un correctif.