python - एक पांडस डेटाफ्रेम में समूहित डेटा से हिस्टोग्राम प्लॉट करना




pandas histogram (4)

मुझे पांडा डेटाफ्रेम में समूहीकृत डेटा से हिस्टोग्राम के ब्लॉक को साजिश करने के तरीके में काम करने में कुछ मार्गदर्शन चाहिए। मेरे प्रश्न को स्पष्ट करने के लिए यहां एक उदाहरण दिया गया है:

from pandas import DataFrame
import numpy as np
x = ['A']*300 + ['B']*400 + ['C']*300
y = np.random.randn(1000)
df = DataFrame({'Letter':x, 'N':y})
grouped = df.groupby('Letter')

मेरी अज्ञानता में मैंने इस कोड कमांड की कोशिश की:

df.groupby('Letter').hist()

जो त्रुटि संदेश के साथ विफल रहा "TypeError: 'str' और 'float' ऑब्जेक्ट्स को संयोजित नहीं कर सकता"

किसी भी मदद की सराहना की।


Answers

एक समाधान प्रत्येक समूहबद्ध डेटा फ्रेम पर सीधे matplotlib हिस्टोग्राम का उपयोग करना है। आप लूप में प्राप्त समूहों के माध्यम से पाश कर सकते हैं। प्रत्येक समूह एक डेटा फ्रेम है। और आप प्रत्येक के लिए हिस्टोग्राम बना सकते हैं।

from pandas import DataFrame
import numpy as np
x = ['A']*300 + ['B']*400 + ['C']*300
y = np.random.randn(1000)
df = DataFrame({'Letter':x, 'N':y})
grouped = df.groupby('Letter')

for group in grouped:
  figure()
  matplotlib.pyplot.hist(group[1].N)
  show()

आपका फ़ंक्शन विफल हो रहा है क्योंकि आपके द्वारा समाप्त किए गए .hist() में एक पदानुक्रमित सूचकांक और दो कॉलम (पत्र और एन) हैं, इसलिए जब आप करते हैं। .hist() यह दोनों स्तंभों का हिस्टोग्राम बनाने की कोशिश कर रहा है इसलिए स्ट्र त्रुटि।

यह पांडा प्लॉटिंग फ़ंक्शंस (कॉलम प्रति एक प्लॉट) का डिफ़ॉल्ट व्यवहार है, इसलिए यदि आप अपने डेटा फ्रेम को दोबारा बदलते हैं ताकि प्रत्येक अक्षर एक कॉलम हो, आपको वही मिल जाएगा जो आप चाहते हैं।

df.reset_index().pivot('index','Letter','N').hist()

reset_index() इंडेक्स नामक कॉलम में वर्तमान इंडेक्स को reset_index() लिए है। फिर pivot आपके डेटा फ्रेम ले जाएगा, प्रत्येक Letter लिए सभी मान N एकत्रित करें और उन्हें एक कॉलम बनाएं। परिणामी डेटा फ्रेम 400 पंक्तियों के रूप में ( NaN साथ गुम मूल्यों को भरता है) और तीन कॉलम ( A, B, C )। hist() फिर प्रति स्तंभ एक हिस्टोग्राम का उत्पादन करेगा और आप आवश्यकतानुसार प्लॉट प्रारूपित करेंगे।


मैं रोल पर हूं, हिस्ट विधि में कीवर्ड द्वारा इसका उपयोग करने के लिए बस एक आसान तरीका मिला है:

df['N'].hist(by=df['Letter'])

आपके समूहबद्ध डेटा को तेज़ी से स्कैन करने के लिए यह एक बहुत ही आसान छोटा शॉर्टकट है!

भविष्य के आगंतुकों के लिए, इस कॉल का उत्पाद निम्नलिखित चार्ट है:


नोटबुक में

आईपीथन नोटबुक में डेटा अन्वेषण के लिए, मेरा पसंदीदा तरीका यह है:

sorted(df)

जो वर्णानुक्रमित क्रमबद्ध सूची को पढ़ने में आसान उत्पन्न करेगा।

एक कोड भंडार में

कोड में मुझे यह करने के लिए और अधिक स्पष्ट लगता है

df.columns

क्योंकि यह दूसरों को आपके कोड को पढ़ने के बारे में बताता है जो आप कर रहे हैं।





python pandas histogram