Ich habe folgendes Problem:
Ich habe eine Punktwolke (df1) nach HSV-Werten (grün) gefiltert und als eigenen Dataframe (df2) angelegt. Nun möchte ich von der ursprünglichen Punktwolke (df1) die gefilterte Punktwolke (df2) abziehen, sodass ich praktisch ein dritten Dataframe (df3) erhalte, der die übrigen Punkte ohne grün enthält. Welche Funktion wäre hier angebracht?
gefilterte Punktwolke von Urspungspunktwolke abziehen
- __blackjack__
- User
- Beiträge: 13170
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@mediamarc: Wie hast Du denn nach grün gefiltert? Negiere einfach die Bedingung. Ich vermute mal der ``~``-Operator könnte hilfreich sein.
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
Hier der Code, mit dem ich die Punktwolke gefiltert habe:
Code: Alles auswählen
df2 = df.set_axis(['X', 'Y', 'Z', 'R', 'G', 'B', 'Nx', 'Ny', 'Nz', 'H', 'S', 'V'], axis=1, inplace=False)
df3 = df2[(df2.H >= 60) & (df2.H <= 180) & (df2.S >= 30) & (df2.V >= 30)]
Immer schön, wenn man aus den Antworten nicht herauslesen kann, ob das Problem nun gelöst ist, oder nicht.
Für alle anderen, hier die Lösung:
Für alle anderen, hier die Lösung:
Code: Alles auswählen
mask = (df2.H >= 60) & (df2.H <= 180) & (df2.S >= 30) & (df2.V >= 30)
df_gruen = df2[mask]
df_nicht_gruen = df2[~mask]
- __blackjack__
- User
- Beiträge: 13170
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Ich würde noch bessere Namen und `Series.between()` in den Ring werfen:
Code: Alles auswählen
green_mask = (
all_points_data["H"].between(60, 180)
& (all_points_data["S"] >= 30)
& (all_points_data["V"] >= 30)
)
green_points_data = all_points_data[green_mask]
non_green_points_data = all_points_data[~green_mask]
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis