[FIXED] Mehrere Boxplots basierend auf Bedingungen

Ausgabe

Ich habe einen Datenrahmen mit zwei Spalten. Die Stromsäule repräsentiert den Stromverbrauch des Systems. Und die Spalte „component_status“ teilt die Daten in zwei Teile, basierend darauf, ob die Komponente AUS oder EIN ist. Bei Werten von 153 ist die Komponente EIN und bei Werten von 150 ist die Komponente AUS.

Das Ergebnis, nach dem ich suche, ist ein Boxplot mit drei Boxplots mit sns.boxplot. Einer ist der Stromverbrauch mit allen Daten, genannt „TOTAL“. Die anderen beiden basieren auf dem Stromverbrauch, ob die Komponente AUS oder EIN war, genannt “KOMPONENTE = EIN” “KOMPONENTE = AUS”.

Das Datenrahmenbeispiel sieht wie folgt aus:

power|component_status |
 0.5 |       150       | 
 1.5 |       150       | 
 2.5 |       150       |
 0.3 |       153       |
 0.5 |       153       | 
 1.5 |       153       | 
 2.5 |       150       |
 0.3 |       153       |

danke für die Hilfe.

Lösung

Ihr erster Schritt besteht darin, Ihren Datenrahmen mit den Bedingungen zu erstellen. Es gibt ein paar Möglichkeiten, dies zu tun.

  1. Beginnen wir mit einem Anfangsbuchstaben df1(Datenrahmen Nr. 1), wie Sie ihn angegeben haben. conditionLassen Sie uns dann eine Spalte hinzufügen , in der “Gesamt” steht. Sie können verwenden , um print(df1)zu sehen, wie das aussieht.
  2. Dann kopieren wir diesen Datenrahmen in df2und ersetzen die conditionsdurch die Ein-/Aus-Kriterien aus der component_status.
  3. Unser endgültiger Datenrahmen dfist nur eine Verkettung von df1und df2.
  4. Jetzt haben wir einen Datenrahmen df, der in Seaborn einsatzbereit ist.

Importe und DataFrame

# Set up
import pandas as pd
import numpy as np
import seaborn as sns

power = [0.5, 1.5, 2.5, 0.3, 0.5, 1.5, 2.5, 0.3]
component_status = [150, 150, 150, 153, 153, 153, 150, 153]
df1 = pd.DataFrame(
    data=zip(power, component_status), columns=["power", "component_status"]
)

# Step 1
df1["condition"] = "Total"
# print(df1)

# Step 2
df2 = df1.copy()

df2["condition"] = np.where(df2["component_status"] == 153, "On", "Off")

# If you have several criteria, it can be easier to use np.select
# ... or just use Pandas directly:
# df2.loc[(df2['component_status'] == 153), 'condition'] = 'On'
# df2.loc[(df2['component_status'] == 150), 'condition'] = 'Off'

### Step 3
df = pd.concat([df1,df2])

dfAussicht

   power  component_status condition
0    0.5               150     Total
1    1.5               150     Total
2    2.5               150     Total
3    0.3               153     Total
4    0.5               153     Total
5    1.5               153     Total
6    2.5               150     Total
7    0.3               153     Total
0    0.5               150       Off
1    1.5               150       Off
2    2.5               150       Off
3    0.3               153        On
4    0.5               153        On
5    1.5               153        On
6    2.5               150       Off
7    0.3               153        On

Plotten

# Step 4
ax = sns.boxplot(data=df, x='condition', y='power')

Geben Sie hier die Bildbeschreibung ein


Beantwortet von –
a11


Antwort geprüft von –
Marie Seifert (FixError Admin)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like