3

我们有一组单独日期的数据重新排列 - 第一个属性是时间戳,其余的是值。

其中几个:

    ts             a    b    c
2010-08-06 08:00, 1.2, 3.4, 5.6
2010-08-06 08:05, 1.2, 3.4, 5.6
2010-08-06 08:10, 1.2, 3.4, 5.6
2010-08-06 08:15, 2.2, 3.3, 5.6
2010-08-06 08:20, 1.2, 3.4, 5.6

我们想要生成每个值的平均值数组(就像您将所有一天的数据放在彼此之上,并对排列的所有值进行平均)。时间戳时间都匹配,所以我们可以通过创建一个带有时间戳的结果重新数组来做到这一点,其他列全为 0,然后执行以下操作:

for day in day_data:
    result.a += day.a
    result.b += day.b
    result.c += day.c

result.a /= len(day_data)
result.b /= len(day_data)
result.c /= len(day_data)

似乎更好的方法是将每天转换为仅包含数字的二维数组(去掉时间戳),然后在一次操作中按元素对它们进行平均,但我们找不到这样做的方法 -它始终是一维对象数组。

有谁知道如何做到这一点?

4

1 回答 1

8

有几种方法可以做到这一点。一种方法是选择recarray的多列并将它们转换为浮点数,然后重新整形为二维数组:

new_data = data[['a','b','c']].astype(np.float).reshape((data.size, 3))

或者,您可以考虑这样的事情(可以忽略不计,但更具可读性):

new_data = np.vstack([data[item] for item in ['a','b','c']]).T

另请注意,研究pandas的此类操作可能是一个好主意,这样您就可以轻松地处理异构数据。

于 2010-08-11T15:46:57.040 回答