2017-01-03 74 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)) 

在這種形式,它需要很多反覆調用Concat的解壓縮每一行的列表。必須有一個更直接的方法,我錯過了。

也有類似的問題,例如這一個Returning multiple values from pandas apply on a DataFrame,但他們都擴大輸出到單獨的列,而我需要它在一個單一的列。

編輯:正如恩斯正確地指出,possiblities在這種情況下是

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

回答

1

用下面的例子:

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

首先,使輸出一個熊貓系列所以結果是分三欄:

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

就是這樣,謝謝。我被掛了,因爲它可以返回