【问题标题】:Return a pandas series of date time in chronological order by the original series' indices按原始系列的索引按时间顺序返回 pandas 日期时间系列
【发布时间】:2018-01-15 21:51:18
【问题描述】:

我编译了一个 pandas 系列的日期时间,如下所示(下面以该系列的一部分为例):

0   2002-02-03
1   1979-01-01
2   2006-12-25
3   2008-07-16
4   2005-05-30

注意:每个单元格的 dtype 是 'pandas._libs.tslib.Timestamp'

对于上面的示例,我想按时间顺序对它们进行排名,并按原始系列的索引返回一个系列,如下所示(第二列):

0   1
1   0
2   3
3   4
4   2

我尝试混合使用 .order()、.sort() 和 .index() 来实现这一点,但到目前为止无济于事。按原始系列的索引按时间顺序获取一系列日期时间的最简单方法是什么?

谢谢。

【问题讨论】:

    标签: python pandas datetime series indices


    【解决方案1】:

    您可以使用Series.rank,减去1 并转换为int

    a = df['date'].rank(method='dense').sub(1).astype(int)
    print (a)
    0    1
    1    0
    2    3
    3    4
    4    2
    Name: date, dtype: int32
    

    Series.rank中的参数method

    方法:{'average', 'min', 'max', 'first', 'dense'}

    average:组内平均排名
    min:组内排名最低
    ma​​x:组内排名最高
    first:按照它们在数组中出现的顺序分配的排名
    密集:类似于“min”,但组间排名总是增加 1

    【讨论】:

    • 非常感谢!这解决了我的问题。请问'method=dense'是什么意思?
    • 再次感谢您的解释。
    【解决方案2】:
    1. 只需尝试从 tslib.Timestamp 更改日期时间序列 to_datetime()to_pydatetime()
    2. 为 original_index 创建一个列 (dfl['org_ind'] = np.arange(1:len(df)) 然后做 - df.sort_values(by='foo', ascending=True)

    您将按时间顺序和 original_index 获得您的日期...

    【讨论】:

    • 谢谢,这也是一个优雅的解决方案。
    猜你喜欢
    • 2012-08-24
    • 2022-01-26
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 2012-11-24
    • 2017-04-24
    • 2017-09-15
    相关资源
    最近更新 更多