2017-01-03 5 views
1

difflibのget_closest_matchesを使用して、入力ベクトルの各値に対してN = 3の最適な一致を返します。私のような、データフレーム内の単一の列に出力を格納したい:パンダ:入力ベクトルをN個の出力に展開/マッピングする

input output 
"xyz" "xyz" 
"xyz" "xzy" 
"xyz" "xxy" 
"pqr" "pqr" 
... 

それが自動的に拡張されます適用するために、私は呼び出しから返す必要がありますどのような/ N出力への入力放送しますか?例えば、これは、リストとして出力を返すだろう。

data["output"] = data["input"].apply(lambda x: difflib.get_close_matches(x, possibilities)) 

この形態においては、各行のリストを展開するために連結するために多くの反復呼び出しを必要とするであろう。私が紛失しているより単純な方法が必要です。

このような質問がありますが、いずれもReturning multiple values from pandas apply on a DataFrameですが、出力はすべて別の列に展開されますが、1つの列に出力する必要があります。

編集:結果になるよう出力にパンダシリーズを作り、

possibilities = ['xyz', 'xzy', 'xxy', 'pqr'] 

まず:IANSが正しく指摘するように、この場合のpossiblities次の例では

possibilities = ['xyz', 'xzy', 'xxy', 'pqr'] 

答えて

1

です3列:

output = data["input"].apply(
    lambda x: pd.Series(difflib.get_close_matches(x, possibilities)) 
) 

出力:

 0 1 2 
0 xyz xzy xxy 
1 pqr NaN NaN 

第二は、参加して、あなたがなりたい場所をほとんどしている、アンスタック:

result = data.join(output).set_index('input').unstack() 

出力:

input 
0 xyz  xyz 
    pqr  pqr 
1 xyz  xzy 
    pqr  NaN 
2 xyz  xxy 
    pqr  NaN 

第三、すべてのこと残っているのは、いくつかの美化です。例えば、

result.rename('output').reset_index(level=1).sort_values('input').dropna() 

出力:

input output 
0 pqr pqr 
0 xyz xyz 
1 xyz xzy 
2 xyz xxy 
+0

それだ、ありがとう。私はいくつかの入力に対して

関連する問題