Ich möchte die Behälter für "S" einzeln extrahieren, wobei jede Spalte (X & amp; Y) & gt; 0,5 oder mehrere Behälter & gt; 0,5 * 'Anzahl der Zeilen'.
Im Beispiel;
für 'AR1' sollte nur bin 4 ausgewählt werden, da 'X' und 'Y' & gt; 0,5 (blau angezeigt)
für 'PO1' sollten die Fächer 1, 2, 3 und 4 ausgewählt werden, da 'X' und 'Y' & gt; (4 * 0,5) (gelb angegeben).
Ich habe das früher mit einem for loop
versucht, aber das hat nicht richtig funktioniert;
Mehrere (benachbarte) Zeilen bedingt auswählen
BEARBEITEN
Wie es aussehen sollte, ist das df wie in der Frage gezeigt, aber die Zeilen, die sich nicht qualifizieren, werden herausgefiltert. Was ich überprüfe ist das; die Werte in X und Y & gt; 0,5 für jede Zeile (Bin) einzeln oder kombiniert. Kombinationen von Zeilen nur nacheinander, 2, 3, 4 oder 5 Zeilen kombiniert.
Ie, die Kombinationen von Zeilen für 0 sind dann; 0 + 1, 0 + 1 + 2, 0 + 1 + 2 + 3 und 0 + 1 + 2 + 3 + 4. Für 1 ; 1 + 2, 1 + 2 + 3 und 1 + 2 + 3 + 4 usw.
Mehrere Zeilen summieren sich zu der Anzahl der Zeilen x 0,5, X und Y müssten & gt; 2,5 für die Zeilen 0 bis 4 zum Beispiel.
EDIT2: @JohnE und piRSquared, funktionieren beide Lösungen, welche würde jedoch besser funktionieren, wenn es im Datenframe noch andere Spalten gibt, die nicht ausgewertet werden sollten?
Außerdem, was wäre, wenn ich eine zusätzliche Bedingung in Ihren Lösungen hinzufügen möchte?
EDIT3: @piRSquared, Wenn ich einige Spalten untergeordnet bekomme, bekomme ich nur diejenigen zurück, wo ich alle brauchen würde, nicht nur die Teilmenge.
Könnten Sie helfen? Danke.
Dies ist ein vektorisierter Ansatz mit nur einer Schleife auf der obersten Ebene ( groupby.apply
)
Strategie
numpy.triu_indices
: Ich muss jedes mögliche Fenster für der rollende mean
größer als einige threshold
. Ich werde jedes mögliche Fenster erfassen, indem ich von Position 0 bis 0 anfange, dann 0 bis 1 dann ... dann 1 zu 1, 1 zu 2 ... und so weiter. Aber ich muss immer an einer Position beginnen, bevor ich fertig bin. Ich kann auf diese Kombinationen mit numpy.triu_indices
zugreifen. cumsum
: Es wäre ein bisschen schwierig (machbar ), um die erweiterten Arrays zu erhalten, die von jeder Kombination von Indizes angegeben werden, die ich von np.triu_indices
erhalte. Ein besserer Weg ist es, cumsum
zu berechnen und die Differenz von einem Index zum nächsten zu berechnen. cumsum
Nullen voranstellen, damit ich den Unterschied für die erste Zeile machen kann. e / d
habe, überprüfe ich, welche > threshold
sind und welche Kombinationen von Start- und Endpositionen Mittelwerte haben, die größer sind als der Schwellenwert für beide Spalten. groupby
und apply
... QED Zeittest
mit mehr Daten
%Vor%Der Zeitunterschied ist noch dramatischer