data
とrules
の2つのデータフレームがあります。
>>>data >>>rules
vendor rule
0 googel 0 google
1 google 1 Dell
2 googly 2 macbook
各ベンダーとルールの間のレーベンシュタイン類似性を計算した後、data
データフレームに2つの新しい列を追加しようとしています。したがって、私のデータフレームには、理想的には次のような列が含まれている必要があります。
>>>data
vendor rule similarity
0 googel google 0.8
これまでのところ、この構造を返すapply
関数を実行しようとしていますが、データフレームの適用はaxis
引数を受け入れていません。
>>> for index,r in rules.iterrows():
... data[['rule','similarity']]=data['vendor'].apply(lambda row:[r[0],ratio(row[0],r[0])],axis=1)
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "/home/mnnr/test/env/test-1.0/runtime/lib/python3.4/site-packages/pandas/core/series.py", line 2220, in apply
mapped = lib.map_infer(values, f, convert=convert_dtype)
File "pandas/src/inference.pyx", line 1088, in pandas.lib.map_infer (pandas/lib.c:62658)
File "/home/mnnr/test/env/test-1.0/runtime/lib/python3.4/site-packages/pandas/core/series.py", line 2209, in <lambda>
f = lambda x: func(x, *args, **kwds)
TypeError: <lambda>() got an unexpected keyword argument 'axis'
誰かが私が間違っていることを理解するのを手伝ってくれませんか?私が行った変更は、新しいエラーを作成するだけです。ありがとう
Series
のapply
バージョンを呼び出していますが、axis
引数を指定しても意味がないため、エラーが発生します。
あなたがした場合:
data[['rule','similarity']]=data[['vendor']].apply(lambda row:[r[0],ratio(row[0],r[0])],axis=1)
次に、これはこれが機能する単一の列dfを作成します
または、axis
argを削除します。
data[['rule','similarity']]=data['vendor'].apply(lambda row:[r[0],ratio(row[0],r[0])])
更新
あなたがしていることを見て、あなたはすべてのベンダーに対する各ルールのレーベンシュタイン比を計算する必要があります。
これは次の方法で実行できます。
data['vendor'].apply(lambda row: rules['rule'].apply(lambda x: ratio(x, row))
これは、すべてのルールに対する各ベンダーの比率を計算する必要があると思います。