【问题标题】:Modify output from Python Pandas describe修改 Python Pandas 的输出描述
【发布时间】:2020-12-17 04:09:38
【问题描述】:

有没有办法省略 pandas describe 的一些输出? 该命令通过表输出(按 simpleDate 计算的 executeTime 的计数和平均值)准确地给出了我想要的结果

df.groupby('simpleDate').executeTime.describe().unstack(1)

但这就是我想要的,数数和平均数。我想删除标准、最小值、最大值等...到目前为止,我只阅读了如何修改列大小。

我猜答案将是重写该行,而不是使用描述,但我没有任何运气按 simpleDate 分组以平均执行时间。

我可以按日期计算:

df.groupby(['simpleDate']).size()

或按日期执行时间:

df.groupby(['simpleDate']).mean()['executeTime'].reset_index()

但无法弄清楚将它们组合在一起的语法。

我想要的输出:

            count  mean  
09-10-2013      8  20.523   
09-11-2013      4  21.112  
09-12-2013      3  18.531
...            ..  ...

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    .describe() 属性生成一个数据框,其中 count,std,max... 是索引的值,因此根据 documentation 您应该使用,例如:

    df.describe().loc[['count','max']]
    

    【讨论】:

      【解决方案2】:

      Describe 返回一个系列,因此您可以选择所需的内容

      In [6]: s = Series(np.random.rand(10))
      
      In [7]: s
      Out[7]: 
      0    0.302041
      1    0.353838
      2    0.421416
      3    0.174497
      4    0.600932
      5    0.871461
      6    0.116874
      7    0.233738
      8    0.859147
      9    0.145515
      dtype: float64
      
      In [8]: s.describe()
      Out[8]: 
      count    10.000000
      mean      0.407946
      std       0.280562
      min       0.116874
      25%       0.189307
      50%       0.327940
      75%       0.556053
      max       0.871461
      dtype: float64
      
      In [9]: s.describe()[['count','mean']]
      Out[9]: 
      count    10.000000
      mean      0.407946
      dtype: float64
      

      【讨论】:

      • 非常感谢,我尝试了类似的方法,但语法关闭了。效果很好
      • Describe 返回 Series 或 Dataframe,具体取决于您将其应用于什么... 此方法仅适用于 Series
      【解决方案3】:

      查看答案,我没有看到在使用 groupby() 后从 describe() 返回的 DataFrame 上实际工作的答案。

      MultiIndex selection 上的文档给出了答案的提示。 .xs() 函数适用于单选而非多选,但 .loc 有效。

      df.groupby(['simpleDate']).describe().loc[:,(slice(None),['count','max'])]
      

      这保留了 .describe() 返回的漂亮 MultiIndex,但只选择了列。

      【讨论】:

      • 这很好,但是loc 语法是错误的。它应该是loc[…](即带方括号)。
      【解决方案4】:

      @Jeff 提供的解决方案仅适用于系列。

      @Rafa 说得对:df.describe().info() 表明生成的数据帧有 Index: 8 entries, count to max

      df.describe().loc[['count','max']] 确实有效,但 OP 要求的 df.groupby('simpleDate').describe().loc[['count','max']] 无效。

      我认为解决方案可能是这样的:

      df = pd.DataFrame({'Y': ['A', 'B', 'B', 'A', 'B'],
                          'Z': [10, 5, 6, 11, 12],
                                              })
      

      Y对df进行分组:

      df_grouped=df.groupby(by='Y')     
      
      
      In [207]df_grouped.agg([np.mean, len])
      
      Out[207]: 
              Z    
           mean len
      Y            
      A  10.500   2
      B   7.667   3
      

      【讨论】:

        【解决方案5】:

        坚持使用describe,可以解开索引,然后也可以正常切片

        df.describe().unstack()[['count','max']]

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-09-23
          • 2014-04-15
          • 1970-01-01
          • 2018-05-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多