2015-12-11 8 views
7

मैं पांडा डेटाफ्रेम में कुछ अप्रासंगिक कॉलम के साथ वर्ष, कवकनाश, राशि का उपयोग किया गया है, जिसमें फंगसाइड उपयोग पर कुछ डेटा उपयोग कर रहा हूं। यह कुछ हद तक दिखाई देता है:ग्रुपबी एकाधिक मान, और साजिश परिणाम

Year, State,  Fungicide, Value 
2011, California, A,   12879 
2011, California, B,   29572 
2011, Florida, A,   8645 
2011, Florida, B,   19573 
2009, California, A,   8764 
2009, California, B,   98643, 
... 

क्या मैं इसे से चाहते कुल समय के साथ इस्तेमाल किया कवकनाशी के एक ही प्लॉट, एक लाइन के साथ प्रत्येक व्यक्ति कवकनाशी के लिए साजिश रची (एक अलग रंग में)। मैं .groupby का उपयोग किया है हर साल इस्तेमाल किया प्रत्येक कवकनाशी की कुल राशि प्राप्त करने के लिए:

apple_fplot = df.groupby(['Year','Fungicide'])['Value'].sum() 

यह मैं मान रहा प्लॉट करने के लिए चाहते हैं देता है, जैसे कुछ:

Year, Fungicide, Value 
... 
2009, A,  128635 
     B,  104765 
2011, A,  154829 
     B,  129865 

अब मैं साजिश करने की जरूरत है इतना है कि यह प्रत्येक कवकनाशी (ए, बी, ...) समय

से अधिक एक ही प्लॉट मूल्य की पर एक अलग लाइन वहाँ है यह सब को अलग करने के बिना ऐसा करने का एक तरीका है? मेरी अज्ञानता को माफ कर दो, मैं अजगर के लिए नया हूं और अभी भी इसके साथ परिचित हूं।

+0

क्या आप आसानी से कवकनाश समूह भी नहीं कर सकते? –

उत्तर

5

के लिए यहाँ देखें एक साफ समाधान है जो ठीक से legend और xticks प्रिंट के लिए, आप

apple_fplot = df.groupby(['Year','Fungicide'])['Value'].sum() 
plot_df = apple_fplot.unstack('Fungicide').loc[:, 'Value'] 
plot_df.index = pd.PeriodIndex(plot_df.index.tolist(), freq='A') 
plot_df.plot() 

enter image description here subplots के लिए, बस संबंधित keywordTrue करने के लिए सेट कर सकता है :

plot_df.plot(subplots=True) 

पाने के लिए:

enter image description here

+0

धन्यवाद, यह वास्तव में अच्छी तरह से काम करता है। स्वगत कथन के रूप में; क्या मैं इस कोड को प्रत्येक पंक्ति के लिए साजिश का उत्पादन करने के लिए संशोधित कर सकता हूं? यह मेरे लिए होता है कि डेटा को अस्पष्ट किए बिना एक साजिश पर दिखाने के लिए मेरे पास बहुत सी रेखाएं हैं। (उल्लेख नहीं है कि अगर मैं इसे दिखाता हूं तो आकृति कथा में साजिश का आधा हिस्सा शामिल है)। मैंने लूप के माध्यम से अवांछित समूहबी चलाने की कोशिश की है लेकिन यह काम नहीं कर रहा है –

+0

फिर से धन्यवाद, लेकिन समस्या यह है कि इतनी सारी लाइनें हैं कि मैं प्लॉट करना चाहता हूं कि उन्हें एक साजिश पर सबप्लॉट्स के रूप में साजिश करते समय यह पूरी तरह से अपठनीय होने के बिंदु पर लंबवत हो जाता है। आदर्श रूप से, मेरे पास प्रत्येक पंक्ति को एक अलग साजिश के रूप में प्लॉट किया जाएगा, और एक अलग फ़ाइल पथ में सहेजा जाएगा। afplot [स्तंभ] .plot; plt.figure (i): 'afplot = apple_fplot.unstack ('डोमेन श्रेणी') मैं के लिए , स्तंभ afplot में: इस मैं पाश के लिए एक करने के लिए कोशिश कर रहा था ऐसा करने के लिए() plt.savefig ('.../सेब fplot {}' प्रारूप (i)) ' मुझे यकीन नहीं है कि यह काम कर सकता है, लेकिन यह मुझे देता है: ValueError: अनपॅक करने के लिए बहुत सारे मूल्य –

1

की तर्ज पर कुछ:

df_grouped = df.groupby('Fungicide') 
for key, group in df_grouped: 
    group.groupby('Year')['Value'].sum().plot(ax=ax,label=key) 

स्तंभ के मूल्यों एक GroupBy वस्तु पर पाश के लिए उपयोग कर प्रत्येक समूह के माध्यम से पुनरावृति जाएगा, कुंजी बताए (जैसे 'ए' या 'बी', से यह द्वारा समूहित किया गया था), और समूह डेटाफ्रेम हर बार।

एक उदाहरण

http://pandas.pydata.org/pandas-docs/stable/groupby.html#iterating-through-groups

5

आप कर सकते हैं:

import matplotlib 
matplotlib.style.use('ggplot') 
import matplotlib.pyplot as plt 

plt.figure() 
df.groupby(['Year','Fungicide']).sum().unstack().plot() 

enter image description here

डाटा

Year  State Fungicide Value 
0 2011 California   A 12879 
1 2011 California   B 29572 
2 2011  Florida   A 8645 
3 2011  Florida   B 19573 
4 2009 California   A 8764 
5 2009 California   B 98643 
संबंधित मुद्दे