2017-09-14 3 views
2
sdf = sdf['Name1'].apply(lambda x: tryLookup(x, tdf)) 

tryLookup est une fonction qui prend actuellement une chaîne, qui est la valeur de Name1 dans la colonne sdf. Nous mappons la fonction en appliquant à chaque ligne dans le DataFrame sdf.Pandas renvoie DataFrame à partir de la fonction apply?

Au lieu de revenir tryLookup juste une chaîne, est-il un moyen pour tryLookup de retourner une trame de données que je veux fusionner avec le sdf dataframe? tryLookup a quelques informations supplémentaires, et je veux inclure cela dans les résultats en les ajoutant en tant que nouvelles colonnes à toutes les lignes sdf.

Ainsi, le retour de tryLookup est en tant que tel:

return pd.Series({'BEST MATCH': bestMatch, 'SIMILARITY SCORE': humanScore}) 

J'ai essayé quelque chose comme

sdf = sdf.merge(sdf['Name1'].apply(lambda x: tryLookup(x, tdf)), left_index=True, right_index=True) 

Mais que juste lancers francs

Traceback (most recent call last): 
    File "lookup.py", line 160, in <module> 
    main() 
    File "lookup.py", line 40, in main 
    sdf = sdf.merge(sdf['Name1'].apply(lambda x: tryLookup(x, tdf)), left_index=True, right_index=True) 
    File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 4618, in merge 
    copy=copy, indicator=indicator) 
    File "C:\Python27\lib\site-packages\pandas\tools\merge.py", line 58, in merge 
    copy=copy, indicator=indicator) 
    File "C:\Python27\lib\site-packages\pandas\tools\merge.py", line 473, in __init__ 
    'type {0}'.format(type(right))) 
ValueError: can not merge DataFrame with instance of type <class 'pandas.core.series.Series'> 

Toute aide serait grande. Merci.

+0

Vous cherchez 'pd.lookup' https: //pandas.pydata.org/pandas-docs/stable /generated/pandas.DataFrame.lookup.html – Wen

Répondre

0

Essayez de convertir les pd.Series à une trame de données avec pandas.Series.to_frame comme documenté here:

sdf = sdf.merge(sdf['Sold To Name (10)'].apply(lambda x: tryLookup(x, tdf)).to_frame(), left_index=True, right_index=True) 
+0

'sdf' est un DataFrame dans ce cas. – X33