2013-10-17 17 views
5

मेरे पास घटनाओं के साथ डेटाफ्रेम है। एक या अधिक घटनाएं एक तिथि पर हो सकती हैं (इसलिए तिथि इंडेक्स नहीं हो सकती है)। तिथि सीमा कई सालों है। मैं वर्षों और महीनों को समूहबद्ध करना चाहता हूं और श्रेणी मूल्यों की गिनती करता हूं। Thnxपांडा समूह की तारीख

in [12]: df = pd.read_excel('Pandas_Test.xls', 'sheet1') 
In [13]: df 
Out[13]: 
    EventRefNr  DateOccurence  Type Category 
0  86596 2010-01-02 00:00:00  3 Small 
1  86779 2010-01-09 00:00:00 13 Medium 
2  86780 2010-02-10 00:00:00  6 Small 
3  86781 2010-02-09 00:00:00 17 Small 
4  86898 2010-02-10 00:00:00  6 Small 
5  86898 2010-02-11 00:00:00  6 Small 
6  86902 2010-02-17 00:00:00  9 Small 
7  86908 2010-02-19 00:00:00  3 Medium 
8  86908 2010-03-05 00:00:00  3 Medium 
9  86909 2010-03-06 00:00:00  8 Small 
10  86930 2010-03-12 00:00:00 29 Small 
11  86934 2010-03-16 00:00:00  9 Small 
12  86940 2010-04-08 00:00:00  9  High 
13  86941 2010-04-09 00:00:00 17 Small 
14  86946 2010-04-14 00:00:00 10 Small 
15  86950 2011-01-19 00:00:00 12 Small 
16  86956 2011-01-24 00:00:00 13 Small 
17  86959 2011-01-27 00:00:00 17 Small 

मैंने कोशिश की:

df.groupby(df['DateOccurence']) 
+0

क्या आप कोड दिखा सकते हैं जिसकी आपने कोशिश की है? – Jeff

उत्तर

4

आप value_counts SeriesGroupby को (स्तंभ के लिए) लागू कर सकते हैं:

In [11]: g = df.groupby('DateOccurence') 

In [12]: g.Category.apply(pd.value_counts) 
Out[12]: 
DateOccurence   
2010-01-02  Small  1 
2010-01-09  Medium 1 
2010-02-09  Small  1 
2010-02-10  Small  2 
2010-02-11  Small  1 
2010-02-17  Small  1 
2010-02-19  Medium 1 
2010-03-05  Medium 1 
2010-03-06  Small  1 
2010-03-12  Small  1 
2010-03-16  Small  1 
2010-04-08  High  1 
2010-04-09  Small  1 
2010-04-14  Small  1 
2011-01-19  Small  1 
2011-01-24  Small  1 
2011-01-27  Small  1 
dtype: int64 

मैं वास्तव में इस आशा व्यक्त की निम्नलिखित DataFrame वापस जाने के लिए है, लेकिन आपको unstack की आवश्यकता है:

In [13]: g.Category.apply(pd.value_counts).unstack(-1).fillna(0) 
Out[13]: 
       High Medium Small 
DateOccurence      
2010-01-02  0  0  1 
2010-01-09  0  1  0 
2010-02-09  0  0  1 
2010-02-10  0  0  2 
2010-02-11  0  0  1 
2010-02-17  0  0  1 
2010-02-19  0  1  0 
2010-03-05  0  1  0 
2010-03-06  0  0  1 
2010-03-12  0  0  1 
2010-03-16  0  0  1 
2010-04-08  1  0  0 
2010-04-09  0  0  1 
2010-04-14  0  0  1 
2011-01-19  0  0  1 
2011-01-24  0  0  1 
2011-01-27  0  0  1 

अगर वहाँ थे कई अलग अलग ही तिथि वे एक ही पंक्ति पर होगा साथ श्रेणियाँ ...

+0

ग्रेट, और अब महीने तक कैसे समूह करें? – ArtDijk

+0

@ArtDijk मुझे लगता है कि यहां पर चाल का उपयोग डेटाटाइंड इंडेक्स, 'di = pd.DatetimeIndex (df.DateOccurence) का उपयोग करना है; जी = df.groupby ([di.month, di.year]) ' –

6

मैं अक्सर डेटा फ्रेम में अतिरिक्त स्तंभ जोड़ें माह और वर्ष को तोड़ने बाहर के लिए है कि दिनांक बाहर तोड़ प्रत्येक टुकड़ा में:

df['year'] = [t.year for t in df.DateOccurence] 
df['month'] = [t.month for t in df.DateOccurence] 
df['day'] = [t.day for t in df.DateOccurence] 

यह अंतरिक्ष जटिलता (df में कॉलम जोड़ने) कहते हैं लेकिन कम समय परिसर (GroupBy पर कम प्रोसेसिंग) एक datetime सूचकांक की तुलना में है, लेकिन यह वास्तव में आप पर निर्भर है। डेटाटाइम इंडेक्स चीजों को करने का अधिक पांडा तरीका है।

वर्ष, महीने, दिन तोड़ने के बाद आप किसी भी समूह की आवश्यकता कर सकते हैं।

df.groupby['year','month'].Category.apply(pd.value_counts) 

कई वर्षों के पार महीने प्राप्त करने के लिए:

df.groupby['month'].Category.apply(pd.value_counts) 

या एंडी हेडन का दिनांक सूचकांक में

df.groupby[di.month].Category.apply(pd.value_counts) 

आप बस ले सकते हैं कि कौन सी विधि को अपनी आवश्यकताओं बेहतर फिट बैठता है।

संबंधित मुद्दे