2012-10-12 20 views
29
df2 = pd.DataFrame({'X' : ['X1', 'X1', 'X1', 'X1'], 'Y' : ['Y2','Y1','Y1','Y1'], 'Z' : ['Z3','Z1','Z1','Z2']}) 

    X Y Z 
0 X1 Y2 Z3 
1 X1 Y1 Z1 
2 X1 Y1 Z1 
3 X1 Y1 Z2 

g=df2.groupby('X') 

pd.pivot_table(g, values='X', rows='Y', cols='Z', margins=False, aggfunc='count') 

Traceback (most recent call last): ... AttributeError: 'Index' object has no attribute 'index'अजगर पांडा: aggfunc साथ पिवट तालिका = गिनती अद्वितीय अलग

कैसे मैं एक पिवट तालिका एक DataFrame स्तंभ के अद्वितीय मानों की मायने रखता है के साथ दो अन्य स्तंभों के लिए मिलता है?
क्या अद्वितीय संख्या के लिए aggfunc है? क्या मुझे np.bincount() का उपयोग करना चाहिए?

एनबी। मुझे 'श्रृंखला' values_counts() के बारे में पता है, हालांकि मुझे एक पिवट टेबल चाहिए।


संपादित करें: उत्पादन किया जाना चाहिए:

Z Z1 Z2 Z3 
Y    
Y1 1 1 NaN 
Y2 NaN NaN 1 
+0

आप उत्पादन आप चाहते हैं – root

+0

मैं इस में कई विस्तृत उदाहरण और वैकल्पिक तरीकों प्रदान की है पोस्ट कर सकते हैं [** क्यू एंड ए **] (https://stackoverflow.com/q/47152691/2336654) – piRSquared

उत्तर

47

आप कुछ इस तरह का मतलब क्या है?

In [39]: df2.pivot_table(values='X', rows='Y', cols='Z', 
         aggfunc=lambda x: len(x.unique())) 
Out[39]: 
Z Z1 Z2 Z3 
Y    
Y1 1 1 NaN 
Y2 NaN NaN 1 

ध्यान दें कि len का उपयोग कर मान लिया गया है कि आप अपने DataFrame में NA रों जरूरत नहीं है। आप x.value_counts().count() या len(x.dropna().unique()) अन्यथा कर सकते हैं।

+0

धन्यवाद! यह वही करता है जो मैं चाहता था। – dmi

+6

बस इसे नए पैंडस समाधान के साथ अपडेट करने के लिए, 'aggfunc = pd.Series.nunique' समस्या को हल करेगा और अधिक प्रदर्शनशील होना चाहिए। – hume

1

आप X के प्रत्येक विशिष्ट मान के लिए एक पिवट तालिका बना सकते हैं। इस मामले में,

for xval, xgroup in g: 
    ptable = pd.pivot_table(xgroup, rows='Y', cols='Z', 
     margins=False, aggfunc=numpy.size) 

X के प्रत्येक मान के लिए पिवट तालिका का निर्माण करेगी। आप xvalue का उपयोग कर ptable को इंडेक्स करना चाहते हैं। इस कोड के साथ, मैं (X1 के लिए)

 X   
Z Z1 Z2 Z3 
Y    
Y1 2 1 NaN 
Y2 NaN NaN 1 
+1

धन्यवाद। हालांकि मैं एक्स के प्रत्येक विशिष्ट मूल्य की घटनाओं की संख्या की गणना नहीं कर रहा हूं, मैं एक्स और जेड – dmi

8

मिल मुझे लगता है कि यह अधिक परिपूर्ण होगा:

df2.pivot_table(values='X',rows=['Y','Z'],cols='X',aggfunc='count') 


       X1 X2 
Y Z  
Y1 Z1 1 1 
     Z2 1 NaN 
Y2 Z3 1 NaN 
+0

के लिए एक्स में विशिष्ट मानों की संख्या गिन रहा हूं यह एक अस्पष्ट लैम्ब्डा के बिना बिल्कुल आवश्यक है। – Alper

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