2015-09-29 10 views
5

मैं .describe() फ़ंक्शन को एक सुधारित तरीके से आउटपुट करने की कोशिश कर रहा हूं।पांडस पायथन। डिस्प्ले() स्वरूपण/आउटपुट

from pandas import * 

data = read_csv('testProp.csv') 

temp = data.groupby('name')['prop'].describe() 
temp.to_csv('out.csv') 

उत्पादन होता है:

name  
A  count 3.000000 
     mean  2.000000 
     std  1.000000 
     min  1.000000 
     25%  1.500000 
     50%  2.000000 
     75%  2.500000 
     max  3.000000 
B  count 3.000000 
     mean  3.666667 
     std  1.527525 
     min  2.000000 
     25%  3.000000 
     50%  4.000000 
     75%  4.500000 
     max  5.000000 
dtype: float64 

हालांकि, मैं प्रारूप में डेटा चाहते यहाँ जब मैं निम्नलिखित में टाइप csv डेटा (testProp.csv)

'name','prop' 
A,1 
A,2 
B, 4 
A, 3 
B, 5 
B, 2 

है नीचे। मैं transpose() की कोशिश की है और describe() का उपयोग कर बनाए रखने और है कि बजाय a .agg([np.mean(), np.max(), etc....) हेरफेर करने के लिए करना चाहते हैं:

count mean std min 25% 50% 75% max 
A 3 2 1 1 1.5 2 2.5 3 
B 3 3.666666667 1.527525232 2 3 4 4.5 5 

उत्तर

2

एक तरीका यह है करने के लिए पहले, .reset_index() करने के लिए अपने temp DataFrame सूचकांक पुनर्स्थापित करने के लिए हो सकता है, और उसके बाद का उपयोग DataFrame.pivot जैसा आप चाहते हैं। उदाहरण -

In [24]: df = pd.read_csv(io.StringIO("""name,prop 
    ....: A,1 
    ....: A,2 
    ....: B, 4 
    ....: A, 3 
    ....: B, 5 
    ....: B, 2""")) 

In [25]: temp = df.groupby('name')['prop'].describe().reset_index() 

In [26]: newdf = temp.pivot(index='name',columns='level_1',values=0) 

In [27]: newdf.columns.name = '' #This is needed so that the name of the columns is not `'level_1'` . 

In [28]: newdf 
Out[28]: 
     25% 50% 75% count max  mean min  std 
name 
A  1.5 2 2.5  3 3 2.000000 1 1.000000 
B  3.0 4 4.5  3 5 3.666667 2 1.527525 

तो फिर तुम सीएसवी को यह newdf बचा सकता है।

+0

काम नहीं करता के लिए दस्तावेज़ pandas unstack की जाँच करें। देता है "KeyError: 0" – Shehryar

0

पांडा v0.22 में, आप अनस्टैक सुविधा का उपयोग कर सकते हैं। उपरोक्त @ कुमर उत्तर से बिल्डिंग, आप पांडा स्टैक/अनस्टैक फीचर का उपयोग कर सकते हैं और इसके बदलाव के साथ खेल सकते हैं।

from io import StringIO 
import pandas as pd 
df = pd.read_csv(StringIO("""name,prop 
    A,1 
    A,2 
    B, 4 
    A, 3 
    B, 5 
    B, 2""")) 

df.shape 
df 
temp = df.groupby(['name'])['prop'].describe() 
temp 
temp.stack() #unstack(),unstack(level=-1) level can be -1, 0 

अधिक जानकारी के

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