Ich habe Pandas Datenrahmen wie folgt:Wie automatisieren Reihen Filtern von Spalten
df =
COL_1 COL_2 VAL_1
ABC AAA ABC
CDE CDE RTY
ABC ABC RTY
ABC RTY DEF
ich mit COL
beginnen die Anzahl der Zeilen enthält einen eindeutigen Wert von Spalten caculate wollen: COL_1
und COL_2
(VAL_1
sollte nicht benutzt).
Das erwartete Ergebnis ist:
GROUP COUNT
ABC 3
CDE 2
RTY 1
AAA 1
Eine Möglichkeit ist es, manuell Spaltennamen angeben, und die Anzahl der Zeilen berechnen auch manuell alle möglichen Werte für GROUP
angeben. Aber offensichtlich ist diese Lösung nicht gut, wenn die Anzahl der Spalten und Werte in GROUP
groß ist.
Wie wird es automatisch gemacht? Ich denke, dass der Ansatz sein sollte, alle Zeilen zu filtern, die Tunique-Werte für Spalten haben, die mit COL
beginnen?
Ich habe dies versucht, aber es dauert eine lange Zeit auf einem Datensatz von 1 GB und es gibt einige falsche Ergebnisse. Ich weiß auch nicht, wie man die Werte von GROUP
: str.contains('ABC')
vermeidet.
t_cols = [c for c in df.columns.values if not c.startswith('COL')]
aa = df.drop(t_cols,axis=1)
aa.apply(lambda row: row.astype(str).str.contains('ABC').any(), axis=1).shape
ja, diese Lösung ist besser! :) – MaxU
Das ist eine nette Lösung. Übrigens wissen Sie, wie Sie diesem Code Bedingungen hinzufügen? Ich meine, was ist, wenn ich Zeilen zählen muss, auch wenn man bedenkt, dass der Wert der Spalte "VAL_1" gleich "ABC" ist? – Dinosaurius
Wenn Sie die Anzahl der Zeilen, die Sie haben, zählen, können Sie 'shape [0]' verwenden und auch den logischen Index verwenden, um Zeilen mit Bedingungen auszuwählen. Die Syntax wäre etwas wie 'df [df.VAL_1 == "ABC"]. Filter (regex = "^ COL"). Shape [0] 'je nachdem, was Sie brauchen. – Psidom