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




pandas histogram (4)

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

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

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

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

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

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' ऑब्जेक्ट्स को संयोजित नहीं कर सकता"

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


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

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

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

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


एक समाधान प्रत्येक समूहबद्ध डेटा फ्रेम पर सीधे 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()

यदि आप पंक्ति सूचकांक और कॉलम नाम से एक तत्व प्राप्त करना चाहते हैं, तो आप इसे df['b'][0] तरह कर सकते हैं। यह उतना आसान है जितना आप छवि कर सकते हैं।

या आप df.ix[0,'b'] उपयोग कर सकते हैं, सूचकांक और लेबल का मिश्रित उपयोग।





python pandas histogram