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.
- Beginnen wir mit einem Anfangsbuchstaben
df1
(Datenrahmen Nr. 1), wie Sie ihn angegeben haben.condition
Lassen Sie uns dann eine Spalte hinzufügen , in der “Gesamt” steht. Sie können verwenden , umprint(df1)
zu sehen, wie das aussieht. - Dann kopieren wir diesen Datenrahmen in
df2
und ersetzen dieconditions
durch die Ein-/Aus-Kriterien aus dercomponent_status
. - Unser endgültiger Datenrahmen
df
ist nur eine Verkettung vondf1
unddf2
. - 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])
df
Aussicht
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')
Beantwortet von – a11
Antwort geprüft von – Marie Seifert (FixError Admin)