次のようなデータフレームがあるとします。
df = pd.DataFrame([['foo', 'x'], ['bar', 'y']], columns=['A', 'B'])
A B
0 foo x
1 bar y
次のように、データフレームに関して、Applyで単一引数関数を使用する方法を知っています。
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
データフレームに複数の入力引数が含まれている場合、データフレームに適用を使用するにはどうすればよいですか?これが私が欲しいものの例です:
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
この1つの特定の例を解決するための回避策を探しているのではなく、一般にこのようなことを行う方法を探しています。どんなアドバイスでもよろしくお願いします。
apply
はargs
とkwargs
を受け入れ、some_func
に直接渡します。
df.apply(some_func, var1='DOG', axis=1)
または、
df.apply(some_func, args=('DOG', ), axis=1)
0 foo-x-DOG
1 bar-y-DOG
dtype: object
ベクトル化されたロジックを使用する必要があります。
df['C'] = df['A'] + '-' + df['B'] + '-DOG'
本当に使いたいならdf.apply
、つまり薄いベールループであり、引数を追加パラメーターとして単純にフィードできます。
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)
ドキュメント 、df.apply
は、位置引数とキーワード引数の両方を受け入れます。
私はそれができると思います
df.apply('-'.join,1)+'-DOG'
Out[157]:
0 foo-x-DOG
1 bar-y-DOG
dtype: object