नमूना डेटा के एक साल:साइड-बाई-साइड एक पांडा DataFrame की एकाधिक स्तंभों के boxplot
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"))
मैं इन आंकड़ों को साथ-पक्ष महीने (यानी, दो बक्से प्रति के आधार पर वर्गीकृत boxplot करना चाहते हैं माह, A
के लिए एक और B
के लिए एक)। एक कॉलम के लिए sns.boxplot(df.index.month, df["A"])
ठीक काम करता है। हालांकि, sns.boxplot(df.index.month, df[["A", "B"]])
एक त्रुटि फेंकता है (ValueError: cannot copy sequence with size 2 to array axis with dimension 365
)। सूचकांक (pd.melt(df, id_vars=df.index, value_vars=["A", "B"], var_name="column")
) द्वारा डेटा को पिघलने के लिए सीबर्न की hue
संपत्ति को वर्कअराउंड के रूप में उपयोग करने के लिए या तो (TypeError: unhashable type: 'DatetimeIndex'
) काम नहीं करता है।
(ए समाधान जरूरी Seaborn उपयोग करने की आवश्यकता नहीं है, तो यह आसान है सादा matplotlib इस्तेमाल करते हैं।)
/संपादन: मैं एक वैकल्पिक हल में पाया गया कि मूल रूप से पैदा करता है कि मैं क्या चाहता हूँ। हालांकि, डेटाफ्रेम में प्लॉट करना चाहते हैं, उससे अधिक चर शामिल होने के साथ काम करने के लिए यह कुछ अजीब हो जाता है। तो यदि ऐसा करने के लिए एक और अधिक सुरुचिपूर्ण/सीधा तरीका है, तो कृपया साझा करें!
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)
अपने जवाब के लिए धन्यवाद करना चाहते हैं। क्षमा करें अगर मेरा मुख्य पोस्ट अस्पष्ट है। मुझे खुशी होगी अगर आप इसे सुधारने में मेरी मदद कर सकते हैं। मैं एक वर्कअराउंड/समाधान संपादित करूंगा जो मैंने मूल पोस्ट में एक मिनट में पाया था ताकि मेरा मतलब स्पष्ट हो सके। –