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: 13111
- 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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
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: 13111
- 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]
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman