通过增加日期时间进行Numpy排序

use*_*727 1 python sorting datetime numpy

我有一个i包含datetime元素的第一个数组(具有形状(33416,))和第二个m包含浮点值的数组(具有形状(33416,20)).这与在特定时刻进行的20次测量相对应.我想i根据增加的日期时间值对数组进行排序,i并相应地对数组行进行排序m,以便在此时刻增加测量的瞬间及其相应的20个测量值.有人可以帮帮我吗?或了解我的需求???

Bog*_*dan 6

你也可以使用numpy.假设你有:

dates = numpy.array([datetime(2012,02,03,12,00,00), datetime(2012,02,03,15,00,00), datetime(2012,02,03,13,00,00)])
values = numpy.array([[1, 1], [3, 3], [2, 2]])
Run Code Online (Sandbox Code Playgroud)

你可以先做:

unified = numpy.concatenate((dates.reshape(len(dates), 1), values), axis=1)
Run Code Online (Sandbox Code Playgroud)

这将合并你的两个列表,考虑你想要的应该是一个更适合的方式来保存你的数据.所以现在你有:

unified = array([[2012-02-03 12:00:00, 1, 1],
                 [2012-02-03 15:00:00, 3, 3],
                 [2012-02-03 13:00:00, 2, 2]], dtype=object)
Run Code Online (Sandbox Code Playgroud)

现在你可以这样做:

unified = numpy.sort(unified, axis=0)
Run Code Online (Sandbox Code Playgroud)

这将按日期排序.现在,如果你仍然想要单独的列表,你可以使用它们:

unified[:, 0]

>>> array([2012-02-03 12:00:00, 2012-02-03 13:00:00, 2012-02-03 15:00:00], dtype=object)

unified[:, 1:]

>>> array([[1, 1],
           [2, 2],
           [3, 3]], dtype=object)
Run Code Online (Sandbox Code Playgroud)

在您的评论后编辑好了现在我完全理解您想要通过替换实现的目标

   unified = numpy.sort(unified, axis=0)    
Run Code Online (Sandbox Code Playgroud)

有:

   unified = numpy.array(sorted(unified, key= lambda x: x[0]))
Run Code Online (Sandbox Code Playgroud)

编辑

你试过我刚刚建议的吗?在我的终端:

    unified = numpy.array([[datetime(2012,02,03,12,00,00), 4, 1],[datetime(2012,02,03,15,00,00), 5, 2],[datetime(2012,02,03,13,00,00), 2, 1]], dtype=object)
    >>> unified
        array([[2012-02-03 12:00:00, 4, 1],
               [2012-02-03 15:00:00, 5, 2],
               [2012-02-03 13:00:00, 2, 1]], dtype=object)

    >>> unified = numpy.array(sorted(unified, key=lambda x: x[0]))
    >>> unified
        array([[2012-02-03 12:00:00, 4, 1],
               [2012-02-03 13:00:00, 2, 1],
               [2012-02-03 15:00:00, 5, 2]], dtype=object)
Run Code Online (Sandbox Code Playgroud)