【问题标题】:pandas calculate mean of column that has lists instead of single value熊猫计算具有列表而不是单个值的列的平均值
【发布时间】:2017-11-22 07:10:43
【问题描述】:

我有一个 pandas 数据框,它有一列,每一行都有一个值列表。我需要使用每行的相应值来计算平均值。那就是我需要列表中八个值的平均值。列表中的每个元素都是一个变量的值

>>> df_ex
0    [1, 2, 3, 4, 5, 6, 7, 8]
1    [2, 3, 4, 5, 6, 7, 8, 1]

我尝试将其转换为 numpy 数组,然后采取措施,但我不断收到错误 TypeError: unsupported operand type(s) for /: 'list' and 'int'。我知道我应该将其转换为列,而不是使用列表,但在我的上下文中是不可能的。知道如何实现这一点吗?

【问题讨论】:

    标签: python pandas numpy dataframe


    【解决方案1】:

    可以先转换成嵌套列表再转换成array再计算mean

    a = np.array(df_ex.tolist())
    print (a)
    [[1 2 3 4 5 6 7 8]
     [2 3 4 5 6 7 8 1]]
     
    # Mean of all values
    print (a.mean())
    4.5
    
    # Specify row-wise mean
    print (a.mean(axis=1))
    [ 4.5  4.5]
    
    # Specify column-wise mean
    print (a.mean(axis=0))
    [ 1.5  2.5  3.5  4.5  5.5  6.5  7.5  4.5]
    

    【讨论】:

      【解决方案2】:

      您可以通过传递嵌套列表并指定轴来调用np.mean

      设置

      df_ex = pd.DataFrame(dict(
          col1=[[1, 2, 3, 4, 5, 6, 7, 8],
                [2, 3, 4, 5, 6, 7, 8, 1]]))
      
      df_ex
      
                             col1
      0  [1, 2, 3, 4, 5, 6, 7, 8]
      1  [2, 3, 4, 5, 6, 7, 8, 1]
      

      解决方案

      np.mean(df_ex['col1'].tolist(), axis=1)
      
      array([ 4.5,  4.5])
      

      或者

      np.mean(df_ex['col1'].tolist(), axis=0)
      
      array([ 1.5,  2.5,  3.5,  4.5,  5.5,  6.5,  7.5,  4.5])
      

      【讨论】:

        【解决方案3】:

        最简单的方法:

        col.apply(np.mean)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-02-27
          • 2019-12-23
          • 2022-11-14
          • 1970-01-01
          • 2021-07-21
          • 1970-01-01
          • 2021-12-15
          相关资源
          最近更新 更多