python中列表数据汇总和平均值_对数据进行分类,计算每个类别的平均值和标准差...

我假设你的矩阵在一个列表列表中,并向你展示如何开始。(然而,正如我在一篇评论中提到的,如果你把矩阵放在一个numpy array或matrix中,它也会变得更加简单和快速。)

如果您只是将该值作为一个大的多行字符串,则可以将其转换为浮动列表,如下所示:m = [[float(col) for col in line.split()] for line in s.splitlines()]

现在,通过“根据第6列对这些数字进行分类”,听起来您想要的是按该列的整数值对它们进行分组。在

Python附带了一个^{}函数,它可以完成您在这里想要的大部分功能,但是您必须首先对数据进行排序。在

在Python中,排序和分组以及相关函数总是允许您传递键函数。您不必对第6列进行排序和分组,您可以使用第6列作为键对整行进行排序和分组。在

但实际上,您不想使用第6列的值作为键,而是要使用第6列的整数值。对于前者,您应该使用stdlib中的^{}函数,但是要做更复杂的事情,最好为其编写一个函数:

^{pr2}$

(如果您重复这样做,您可能需要编写一个包装器函数,该函数使用相同的键对其进行排序和分组,这样就不必重复自己的操作,从而出错。)

它提供的是一个内部有迭代器的迭代器,打印出来有点困难:[(k, list(g)) for k, g in groups]

…但你得到的是:[(68,

[[3917.0, 1.0, -0.662261, 25.148, 22.9354, 68.8076],

[3919.0, 1.0, -9.56836, -23.3265, -61.953, 68.8357]]),

(69,

[[3918.0, 1.0, 12.7649, 18.7451, 7.68473, 69.0063],

[3920.0, 1.0, 11.6292, 31.6525, -29.3697, 69.1372],

[3921.0, 2.0, 26.4837, -66.7897, 12.0257, 69.2282],

[3922.0, 1.0, -9.81652, 14.3788, 9.38343, 69.1217],

[3923.0, 2.0, 39.931, -88.1879, 109.498, 69.1604],

[3924.0, 1.0, 4.5502, 3.53887, -6.59604, 69.486],

[3925.0, 2.0, 13.6801, -24.6628, -5.7568, 69.9398]]),

(70, [[3926.0, 1.0, -10.5635, 7.05517, -8.82785, 70.2263]])]

因此,每个k是该类别分组的整数,每个g是该类别中的所有行(按排序顺序)。在

(注意,因为groups是一个迭代器,如果print这个,groups现在将为空。)

这就解决了你的第一个问题,我想你的第二个问题(我不确定你到底想要什么)。在

对于第三种情况,首先需要遍历组:for k, g in groups:

如果要在组中循环多次,则需要立即创建一个列表,然后循环该列表。在

对于每个组,您需要对多个列执行一些统计工作。最简单的方法是使用一个模块来处理所有的数学问题。PyPI上的^{}模块是一个不错的选择,尤其是现在(稍作改动)它可能会最终进入即将发布的Python版本的标准库中。在

但我只想说明一下,因为那是微不足道的。在

所以:def mean(sequence):

return sum(sequence) / len(sequence)

for k, g in groups:

rows = list(g)

print(k)

for column_index in 2, 3, 4:

column = [row[column_index] for row in rows]

print(mean(column))

可能有很多代码不能满足您的需要,但希望它足以让您开始,并在遇到困难时提出更具体的问题。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值