【问题标题】:How to calculate the mean of values for each cell in the matrix, if each cell contains a list with those values如果每个单元格包含具有这些值的列表,如何计算矩阵中每个单元格的值的平均值
【发布时间】:2020-05-24 13:42:40
【问题描述】:

我有一个大小为 20x20 的数据框(类型 pandas.core.frame.DataFrame)。数据框中的 400 个单元格中的每一个都包含一个带有值的 LIST。我想分别计算每个列表(单元格)的平均值。数据框如下所示:

      x          y       z ...
x [1,2,4,3] [1,2,4,3] [1,2,4,3]

y [8,2,6,4] [1,2,4,3] [1,2,4,3]

z [1,2,4,9] [1,2,4,3] [1,2,4,3]
.
.
.

我想得到这样的结果:

    x    y   z ...                       x     y    z ...
x [10] [10] [10]                       x 10    10   10
                                       y 20    10   10
y [20] [10] [10]       or this:        z 16    10   10
                                       .
z [16] [10] [10]                       .
.                                      .
.

我的问题是,如何使用矩阵中的值计算每个单元格/列表的平均值?

【问题讨论】:

  • 为什么在 DataFrame 中有这样的列表?你有没有尝试过,做过任何研究?

标签: python pandas list dataframe mean


【解决方案1】:

矩阵,如果您指的是 pandas DataFrame,而 400 个单元格,我假设您的意思是 400 列和行(或其中之一)。在 pandas (python) 中,您可以像这样计算平均值:

dataframe['x'] = dataframe['x'].apply(lambda x: sum(x)/len(x)) 

.apply() 允许您将函数应用于整个列或数据框,而 lambda 允许您遍历每一行。 x 值是一个单元格(列表),您可以在其上使用 sum() 和 len() 等 Python 函数来计算平均值。

还有其他几种方法可以做到这一点,但如果这有帮助,请告诉我。

所有列的更新:

对所有数据框列执行此操作的快速方法是:

for column in dataframe.columns:
    dataframe[column] = dataframe[column].apply(lambda x: sum(x)/len(x))

【讨论】:

    【解决方案2】:

    这是一种使用applymap 将函数应用于数据帧的每个单元格的方法:

    import numpy as np
    
    dfmean = df.applymap(np.mean)
    print(dfmean)
    
       col1  col2  col3
    0   2.5   2.5   2.5
    

    样本数据

    df = pd.DataFrame({'col1': [[1,2,4,3]], 'col2': [[1,2,4,3]],  'col3': [[1,2,4,3]]})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-15
      相关资源
      最近更新 更多