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

  • Wie korrigiert man die Korrelation zwischen allen Spalten und entfernt sehr korrelierte mit Python oder Pandas
  • Matplotlib-Plot-Fenster wird nicht angezeigt
  • Wie man Autoincrement-Werte für eine Spalte nach dem Hochladen eines Pandas-Dataframs zu einer MySQL-Datenbank erhält
  • Python-Übersetzung von R's read.table 'text' Argument
  • Verknüpfen / Zusammenführen von Dataframes durch vordefinierte Spalten
  • Wie man Zeilen effizient mit einem Pass über das Dataframe zählt
  • 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.