Wie finde ich doppelte Wörter in einer Zeile mit Pandas?

Hier sind Probe jason Daten.

id opened_date title exposure state 1 06/11/2014 9:28 AM Device rebooted and crashed with error 0x024 critical open 2 06/11/2014 7:12 AM Not able to connect to WiFi High open 3 07/23/2014 2:11 PM Sensor failed to recognize movement Low open 4 07/07/2014 5:20 PM When sensor activated, device rebooted with error 0x024 critical closed 

Ich möchte einen Code mit Eingabe als String schreiben und die Ausgabe soll auf die ID zeigen.

Beispielsweise:

 Input String = Sensor : Output = ID 3 and 4 has 'Sensor' word in it Input String = 0x024 : Output = ID 1 and 4 has '0x024' in it. 

Ich vermute, das wird eine Art von Groupby erfordern, aber es funktioniert auf kompletten Datensatz statt einer Zeichenfolge. Ist das mit pandas möglich oder gibt es noch eine andere bessere Lösung, um das zu analysieren?

One Solution collect form web for “Wie finde ich doppelte Wörter in einer Zeile mit Pandas?”

Sie können loc für die Auswahl nach Bedingung verwenden str.contains mit Parameter case=False . Letztes, wenn Sie list benötigen tolist :

 li = ['Sensor','0x024'] for i in li: print (df.loc[df['title'].str.contains(i, case=False),'id'].tolist()) [3, 4] [1, 4] 

Für die Lagerung können Sie dict Verständnis verwenden:

 dfs = { i: df.loc[df['title'].str.contains(i, case=False),'id'].tolist() for i in li } print (dfs['Sensor']) [3, 4] print (dfs['0x024']) [1, 4] 

Wenn du function brauchst, versuch get_id :

 def get_id(id): ids = df.loc[df['title'].str.contains(id, case=False),'id'].tolist() return "Input String = %s : Output = ID " % id + " and ".join(str(x) for x in ids) + " has '%s' in it." % id print (get_id('Sensor')) Input String = Sensor : Output = ID 3 and 4 has 'Sensor' in it. print (get_id('0x024')) Input String = 0x024 : Output = ID 1 and 4 has '0x024' in it. 

BEARBEITEN durch kommentar:

Jetzt ist es komplizierter, weil logisch and :

 def get_multiple_id(ids): #split ids and crete list of boolean series containing each id ids1 = [df['title'].str.contains(x, case=False) for x in ids.split()] #http://stackoverflow.com/a/20528566/2901002 cond = np.logical_and.reduce(ids1) ids = df.loc[cond,'id'].tolist() return "Input String = '%s' : Output = ID " % id + ' and '.join(str(x) for x in ids) + " has '%s' in it." % id print (get_multiple_id('0x024 Sensor')) Input String = '0x024 Sensor' : Output = ID 4 has '0x024 Sensor' in it. 

Wenn es logisch or , ist es einfacher, weil or in re ist | , So können Sie 0x024|Sensor :

 def get_multiple_id(id): ids = df.loc[df['title'].str.contains(id.replace(' ','|'), case=False),'id'].tolist() return "Input String = '%s' : Output = ID " % id + ' and '.join(str(x) for x in ids) + " has '%s' in it." % id print (get_multiple_id('0x024 Sensor')) Input String = '0x024 Sensor' : Output = ID 1 and 3 and 4 has '0x024 Sensor' in it. 
  • Spaltennamen aus der pyodbc execute () - Anweisung zurückgeben
  • Ersetzen Sie Spaltenwerte basierend auf einem anderen Dataframe Python Pandas - besserer Weg?
  • Lese HDF5-Datei zu pandas DataFrame mit Bedingungen
  • Wählen Sie Untermenge von Datenrahmenzeilen anhand einer Liste in Pandas aus
  • Pandas: Richtige Möglichkeit, Werte basierend auf Bedingung für die Untermenge von Multiindex-Datenklappen festzulegen
  • Bedingte Summen für Pandas aggregate
  • Python teilt einen pandas datenrahmen nach woche oder monat und gruppiert die auf diesen sp
  • Wie kann man Pandas DataFrame von floats mit einem Formatstring für Spalten anzeigen?
  • Äquivalent von Paste R zu Python
  • Wie man den Wert in den ersten N Rows von der Gruppe in einem Multi-Index Pandas Dataframe aktualisiert?
  • Pandas DataFrame, Wie lösche ich alle Spalten und Zeilen, die auf 0 summieren
  • Python ist die beste Programmiersprache der Welt.