/ / Side-by-side boxplot viacerých stĺpcov pandy DataFrame - python, panda, plot, sea buzz

Side-by-side boxplot viacerých stĺpcov pandy DataFrame - python, panda, plot, sea buzz

Jeden rok údajov zo vzoriek:

import pandas as pd
import numpy.random as rnd
import seaborn as sns
n = 365
df = pd.DataFrame(data = {"A":rnd.randn(n), "B":rnd.randn(n)+1},
index=pd.date_range(start="2017-01-01", periods=n, freq="D"))

Chcem skopírovať tieto dáta vedľa seba zoskupené podľa mesiaca (t. J. Dve polia mesačne, jedna za A a jeden pre B). Pre jeden stĺpec sns.boxplot(df.index.month, df["A"]) funguje dobre. Avšak, sns.boxplot(df.index.month, df[["A", "B"]]) hodí chybu (ValueError: cannot copy sequence with size 2 to array axis with dimension 365). Tavenie údajov indexom (pd.melt(df, id_vars=df.index, value_vars=["A", "B"], var_name="column")), aby sa použilo morské dno hue ako riešenie nefunguje (TypeError: unhashable type: "DatetimeIndex").

(Riešenie nemusí nutne používať morské dno, ak je jednoduchšie používať obyčajný matplotlib.)

/ Edit: Našiel som riešenie, ktoré v podstate produkuje to, čo chcem. Stáva sa však trochu nepríjemné pracovať s tým, čo DataFrame obsahuje viac premenných, ako chcem vykresliť. Takže ak existuje viac elegantný / priamy spôsob, ako to urobiť, prosím zdieľajte!

df_stacked = df.stack().reset_index()
df_stacked.columns = ["date", "vars", "vals"]
df_stacked.index = df_stacked["date"]
sns.boxplot(x=df_stacked.index.month, y="vals", hue="vars", data=df_stacked)

vyrába: Súbor boxu A a B vedľa seba, zoskupený podľa mesiaca.

odpovede:

0 pre odpoveď č. 1

Vašu otázku úplne nerozumiem, ale môžete sa na tento prístup pozrieť matplotlib, Nie je to najlepšie riešenie.

1) Prestávka df do 12 dátových rámcov months, všetky sú uložené v zozname

DFList = []
for group in df_3.groupby(df_3.index.month):
DFList.append(group[1])

2) Nakreslite ich po sebe v smyčke:

for _ in range(12):
DFList[_].plot(kind="box", subplots=True, layout=(2,2), sharex=True, sharey=True, figsize=(7,7))

plt.show()

3) Tu je snímka prvých troch riadkov:

tu zadajte popis obrázku

Môžete tiež chcieť pokladňa matplotlib"s add_subplot metóda