【问题标题】:Calculate mean for each row containing lists of values计算包含值列表的每一行的平均值
【发布时间】:2020-06-01 04:34:48
【问题描述】:

我有一个包含多行和多列的 pandas 数据框,其中每个单元格都包含一个值列表。我想分别计算每一行的值的平均值(在列表中)。

数据框如下所示:

l1 = [[1,2,4,3],[1,2,4,3], [1,2,4,3]]
l2 = [[8,2,6,4],[1,2,4,3],[1,2,4,3]]
l3 = [[1,2,4,9],[1,2,4,3],[1,2,4,3]]

df = pd.DataFrame([l1, l2, l3], columns=list('xyz'))

df:

      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         MEAN
x [1,2,4,3] [1,2,4,3] [1,2,4,3]   2.50000

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

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

有什么建议吗?

【问题讨论】:

  • 第一行的平均值 3.333 是多少?不应该是 (1+2+3+4)*3 / 12 还是 2.5
  • 另一个问题,如何获取此数据框中每个单元格(列表)的长度?
  • df['len_x'] = df['x'].apply(len, axis=1)

标签: pandas list rows mean


【解决方案1】:

您可以通过 numpy.concatenate 将每行的值展平为 numpy 数组并调用 mean

df['MEAN'] = [np.concatenate(x).mean() for x in df.to_numpy()]
#for oldier pandas versions
#df['MEAN'] = [np.concatenate(x).mean() for x in df.values]
print (df)
              x             y             z      MEAN
x  [1, 2, 4, 3]  [1, 2, 4, 3]  [1, 2, 4, 3]  2.500000
y  [8, 2, 6, 4]  [1, 2, 4, 3]  [1, 2, 4, 3]  3.333333
z  [1, 2, 4, 9]  [1, 2, 4, 3]  [1, 2, 4, 3]  3.000000

【讨论】:

    猜你喜欢
    • 2019-04-03
    • 1970-01-01
    • 2016-09-02
    • 2014-04-23
    • 2019-08-12
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多