Supposons que j'ai une trame de données comme celle-ci:
df = pd.DataFrame([['foo', 'x'], ['bar', 'y']], columns=['A', 'B'])
A B
0 foo x
1 bar y
Je sais comment utiliser une fonction d'argument unique avec Apply en ce qui concerne les cadres de données, comme ceci:
def some_func(row):
return '{0}-{1}'.format(row['A'], row['B'])
df['C'] = df.apply(some_func, axis=1)
df
A B C
0 foo x foo-x
1 bar y bar-y
Comment puis-je utiliser Apply sur les cadres de données lorsqu'ils impliquent plusieurs arguments d'entrée? Voici un exemple de ce que je veux:
def some_func(row, var1):
return '{0}-{1}-{2}'.format(row['A'], row['B'], var1)
df['C'] = df.apply(some_func(row, var1='DOG'), axis=1)
df
A B C
0 foo x foo-x-DOG
1 bar y bar-y-DOG
Je ne cherche pas de solutions pour résoudre cet exemple particulier, juste comment faire quelque chose comme ça en général. Tout conseil serait bien apprécié, merci.
C'est comme vous le pensez, apply
accepte args
et kwargs
et les transmet directement à some_func
.
df.apply(some_func, var1='DOG', axis=1)
Ou,
df.apply(some_func, args=('DOG', ), axis=1)
0 foo-x-DOG
1 bar-y-DOG
dtype: object
Vous devez utiliser une logique vectorisée:
df['C'] = df['A'] + '-' + df['B'] + '-DOG'
Si vous voulez vraiment utiliser df.apply
, qui est juste une boucle finement voilée , vous pouvez simplement alimenter vos arguments en paramètres supplémentaires:
def some_func(row, var1):
return '{0}-{1}-{2}'.format(row['A'], row['B'], var1)
df['C'] = df.apply(some_func, var1='DOG', axis=1)
Selon les documents , df.apply
accepte les arguments de position et de mot clé.
Je pense que ça peut être
df.apply('-'.join,1)+'-DOG'
Out[157]:
0 foo-x-DOG
1 bar-y-DOG
dtype: object