Wie wähle man die Zeilen aus, die einen bestimmten Wert in mindestens einem der Elemente in einer Zeile enthalten?

Ich habe eine DataFrame DF und eine Liste, sagen List1 . List1 wird aus dem DF und es hat die Elemente in DF aber ohne Wiederholungen vorhanden. Ich muss folgendes machen:
1. Markiere die Zeilen von DF , die ein bestimmtes Element aus List1 (z. B. Iteration aller Elemente in List1 )
2. Re-Index sie von 0 zu was auch immer die Anzahl der Zeilen sind, weil die ausgewählten Zeilen nicht kontinuierliche Indizes haben können.

SAMPLE EINGANG:

 List1=['Apple','Orange','Banana','Pineapple','Pear','Tomato','Potato'] Sample DF EQ1 EQ2 EQ3 0 Apple Orange NaN 1 Banana Potato NaN 2 Pear Tomato Pineapple 3 Apple Tomato Pear 4 Tomato Potato Banana 

Nun, wenn ich den Zugriff auf die Zeilen, die Apple enthalten, wollen, würden diese 0 und 3 sein. Aber ich möchte sie umbenannt wie 0 und 1 (Re-Indexing). Nachdem Apple gesucht wurde, sollte das nächste Element aus List1 genommen und ähnliche Schritte durchgeführt werden. Ich habe andere Operationen, um danach zu spielen, also muss ich den ganzen Prozess in List1 schleifen. Ich hoffe ich habe es gut erklärt und hier ist mein Codelet für das gleiche, was nicht funktioniert:

 for eq in List1: MCS=DF.loc[MCS_Simp_green[:] ==eq] #Indentation was missing MCS= MCS.reset_index(drop=True) <Remaining operations> 

2 Solutions collect form web for “Wie wähle man die Zeilen aus, die einen bestimmten Wert in mindestens einem der Elemente in einer Zeile enthalten?”

Ich glaube du brauchst isin mit any :

 List1=['Apple','Orange','Banana','Pineapple','Pear','Tomato','Potato'] for eq in List1: #print df.isin([eq]).any(1) #print df[df.isin([eq]).any(1)] df1 = df[df.isin([eq]).any(1)].reset_index(drop=True) print df1 EQ1 EQ2 EQ3 0 Apple Orange NaN 1 Apple Tomato Pear EQ1 EQ2 EQ3 0 Apple Orange NaN EQ1 EQ2 EQ3 0 Banana Potato NaN 1 Tomato Potato Banana EQ1 EQ2 EQ3 0 Pear Tomato Pineapple EQ1 EQ2 EQ3 0 Pear Tomato Pineapple 1 Apple Tomato Pear EQ1 EQ2 EQ3 0 Pear Tomato Pineapple 1 Apple Tomato Pear 2 Tomato Potato Banana EQ1 EQ2 EQ3 0 Banana Potato NaN 1 Tomato Potato Banana 

Für die Speicherung von Werten können Sie dict Verständnis verwenden:

 dfs = {eq: df[df.isin([eq]).any(1)].reset_index(drop=True) for eq in List1} print dfs['Apple'] EQ1 EQ2 EQ3 0 Apple Orange NaN 1 Apple Tomato Pear print dfs['Orange'] EQ1 EQ2 EQ3 0 Apple Orange NaN 

Sie können die Elemente in der list identifizieren und die daraus resultierenden neuen DataFrame s sammeln so:

 data_frames = {} for l in List1: data_frames[l] = df[df.isin([l]).any(1)].reset_index(drop=True) print(l, data_frames[l].index.tolist()) 

bekommen:

 Apple [0, 1] Orange [0] Banana [0, 1] Pineapple [0] Pear [0, 1] Tomato [0, 1, 2] Potato [0, 1] 

Die neuen DataFrame Objekte sind im dictionary data_frames :

 data_frames['Apple'] EQ1 EQ2 EQ3 0 Apple Orange NaN 1 Apple Tomato Pear 
  • Sys.exit () wie man es python benutzt
  • Wie konvertiert man eine Liste von String in eine Liste von int
  • Listenindex außerhalb des zulässigen Bereichs?
  • Zip Variable leer nach dem ersten Gebrauch
  • Den Boden eines Schwimmers aufnehmen
  • Senden von Piped-Befehlen über python3-Teilprozess
  • Ansicht von Partitionen in Linux mit python3.x
  • Plastik der Revolution in Python 3 (Matplotlib vielleicht)
  • Importieren von Modulen aus einem Geschwisterverzeichnis für py.test
  • Python 3 TCP / IP ascii Befehl
  • Reguläre Ausdrücke in Python unerwartet langsam
  • Python ist die beste Programmiersprache der Welt.