【问题标题】:Pandas Mean for Certain Column熊猫对某些列的平均值
【发布时间】:2016-09-04 22:28:01
【问题描述】:

我有一个这样的熊猫数据框:

如果 Cluster==1 或 CLuster==2,我如何计算特定列的平均值(最小值/最大值、中位数)?

谢谢!

【问题讨论】:

    标签: python pandas numpy


    【解决方案1】:

    您可以使用以下方法创建仅包含相关行的新 df:

    newdf = df[df['cluster'].isin([1,2)]
    
    newdf.mean(axis=1)
    

    为了计算特定列的平均值,您可以:

    newdf["page"].mean(axis=1) 
    

    【讨论】:

    • 我认为你需要平均超过 axis=0 而不是 1,不是吗?
    • 没关系,你是对的,我以为你是先做 .mean 然后再选择列
    • @evan54 实际上,您在特定列上的计算是正确的,它应该是 axis=0 否则您会得到 ValueError: No axis named 1 for object type <class 'pandas.core.series.Series'> 所以在仔细检查后我编辑了答案。
    【解决方案2】:

    如果您的意思是仅在 Cluster 为 1 或 2 时取平均值,那么此处的其他答案可以解决您的问题。如果你的意思是对 Cluster 的每个值取一个单独的平均值,你可以使用 pandas 的聚合函数,包括 groupybyagg

    df.groupby("Cluster").mean()
    

    是最简单的,将采用所有列的方法,按集群分组。

    df.groupby("Cluster").agg({"duration" : np.mean}) 
    

    是一个示例,您只取一个特定列的平均值,按集群分组。也可以使用np.minnp.maxnp.median

    groupby 方法产生一个GroupBy 对象,它有点像DataFrame,但又不像。将其视为DataFrame 分组,等待对其应用聚合。 GroupBy 对象具有适用于所有列的简单内置聚合函数(第一个示例中的 mean()),还有一个更通用的聚合函数(第二个示例中的 agg()),您可以使用它以多种方式应用特定功能。使用它的一种方法是传递一个dict 的列名键控到函数,因此可以将特定的函数应用于特定的列。

    【讨论】:

      【解决方案3】:

      您可以使用boolean indexing 在一行中完成。例如,您可以执行以下操作:

      import numpy as np
      import pandas as pd
      
      # This will just produce an example DataFrame
      df = pd.DataFrame({'a':np.arange(30), 'Cluster':np.ones(30,dtype=np.int)})
      df.loc[10:19, "Cluster"] *= 2
      df.loc[20:,   "Cluster"] *= 3
      
      # This line is all you need
      df.loc[(df['Cluster']==1)|(df['Cluster']==2), 'a'].mean()
      

      布尔索引数组是True,用于正确的簇。 a 只是计算平均值的列的名称。

      【讨论】:

        【解决方案4】:

        简单直观的答案

        首先选择感兴趣的行,然后平均然后选择感兴趣的列。

        clusters_of_interest = [1, 2]
        columns_of_interest = ['page']
        
        # rows of interest
        newdf = df[ df.CLUSTER.isin(clusters_of_interest) ]
        # average and pick columns of interest
        newdf.mean(axis=0)[ columns_of_interest ] 
        

        更高级

        # Create groups object according to the value in the 'cluster' column
        grp = df.groupby('CLUSTER')
        # apply functions of interest to all cluster groupings
        data_agg = grp.agg( ['mean' , 'max' , 'min' ] )
        

        这也是一个很好的link,它描述了聚合技术。应该注意的是,“简单答案”对集群 1 和 2 或 clusters_of_interest 中指定的任何内容进行平均,而 .agg 函数对具有相同 CLUSTER 值的每组值进行平均。

        【讨论】:

          猜你喜欢
          • 2015-09-11
          • 2018-06-17
          • 2015-07-18
          • 1970-01-01
          • 2017-01-28
          • 2018-06-17
          • 2015-01-21
          • 1970-01-01
          相关资源
          最近更新 更多