Singular und Plural Phrase Matching in Pandas

Ich habe eine Pandas-Serie und weitere Sätze Dataframe wie folgt (nur eine Zusammenfassung der Daten wird hier hinzugefügt).

#df 0 1 teaspoon vanilla extract 1 2 eggs 2 1 cup chopped walnuts 3 1 cup rolled oats 

und

 #ingredients 0 vanilla 1 walnut 2 oat 3 egg 

Ich bewerbe folgende Funktion, um zu prüfen, ob die Zutaten in den # ingredients in den #df-Feldern verfügbar sind.

 masked = map(lambda x: any(ingredients.apply(str.lower).isin(x)), df[0].apply(str.lower).apply(str.split)) df['Ingredient Available'] = masked 

Das Problem ist, wenn die Pluralform der Zutat existiert in der zB: eggs maskierte Feld gibt false (auch Gedanken egg in der # ingredient Liste). Kann mir jemand eine Methode vorschlagen, diese Arbeit zu machen, ohne darüber nachzudenken, ob ihr Singular oder Plural? (Ich folgte dem Pfad, der in den Pandas vorgeschlagen wurde, finden Strings gemeinsam unter den Serien und bitte nicht markieren dies als ein Duplikat, wie diese Frage nicht über dieses Problem erwähnt).

Vielen Dank

  • Konvertieren Sie die Liste der Wörterbücher in Dataframe
  • Pandas lesen csv mit extra Kommas in Spalte
  • Name der Spalte, die den Maximalwert enthält
  • So finden Sie die installierte Pandas Version
  • Hinzufügen von Zeilen zu pandas DataFrame ändert dtype
  • Pandas groupby und Multiindex
  • One Solution collect form web for “Singular und Plural Phrase Matching in Pandas”

    Ich weiß nicht, was deine Spaltennamen für das erste df sind, in meinem Beispiel sind sie beide Zutaten, aber das folgende würde funktionieren:

     In [256]: df1['ingredients'].apply(lambda x: any(df['ingredients'].str.lower().str.contains(x.lower()))) Out[256]: index 0 True 1 True 2 True 3 True Name: ingredients, dtype: bool 

    Im Wesentlichen führt dies eine Reverse-Lookup, wir iterieren über die Zutaten-Serie mit apply und dann testen für die Mitgliedschaft in diesem Zutat in der ganzen df Verwendung contains diese wird Pluralformen in diesem Fall behandeln.

    Python ist die beste Programmiersprache der Welt.