【问题标题】:Pandas python .describe() formatting/outputPandas python .describe() 格式化/输出
【发布时间】:2015-12-26 10:24:08
【问题描述】:

我试图让.describe() 函数以重新格式化的方式输出。 这是 csv 数据 (testProp.csv)

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

当我输入以下内容时:

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

但是,我想要以下格式的数据。我已经尝试过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

【问题讨论】:

    标签: python pandas formatting output describe


    【解决方案1】:

    执行此操作的一种方法是首先执行 .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 保存到csv。

    【讨论】:

      【解决方案2】:

      您可以通过运行以下代码来实现:

      from pandas import *
      data = read_csv('testProp.csv')
      data.describe().T
      

      【讨论】:

        【解决方案3】:

        在 pandas v0.22 中,您可以使用 unstack 功能。在上面的@Kumar 答案的基础上,您可以使用 pandas stack/unstack 功能并使用它的变体。

        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
        

        查看文档pandas unstack 了解更多详情

        【讨论】:

          猜你喜欢
          • 2016-09-24
          • 1970-01-01
          • 1970-01-01
          • 2019-08-19
          • 2013-05-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多