【问题标题】:How to sort pandas dataframe rows by datetime column如何按日期时间列对熊猫数据框行进行排序
【发布时间】:2020-07-03 13:11:10
【问题描述】:

使用以下代码,我期望数据帧(行)从 oldestlatest timestamp 排序。像这样的...

         #raw_dataframe#                         #sorted dataframe#
  Symbol          tagdatetime             Symbol          tagdatetime
0      A  2020-03-01 01:00:00           0      B  2020-01-01 01:00:00
1      B  2020-01-01 01:00:00   ===>    1      A  2020-03-01 01:00:00
2      C  2020-06-01 01:00:00           2      C  2020-06-01 01:00:00

但是对于下面的代码,实际输出是未排序的,

import pandas as pd
df = pd.DataFrame( {'Symbol':['A','B','C'] ,
    'tagdatetime':['2020-03-01 01:00:00','2020-01-01 01:00:00','2020-06-01 01:00:00']})
print(df,"\n-------------------------------")
df['tagdatetime'] = pd.to_datetime(df['tagdatetime'], format="%Y-%m-%d %H:%M:%S").sort_values()
print(df)

Output:
      Symbol          tagdatetime
    0      A  2020-03-01 01:00:00
    1      B  2020-01-01 01:00:00
    2      C  2020-06-01 01:00:00 
    -------------------------------
     Symbol         tagdatetime
    0      A 2020-03-01 01:00:00
    1      B 2020-01-01 01:00:00
    2      C 2020-06-01 01:00:00

我尝试了许多其他solutions,但似乎没有一个适合我。 我在哪里做错了? 当我有两行或多行具有相同时间戳时会发生什么排序?

请回答..

【问题讨论】:

    标签: python-3.x pandas python-datetime


    【解决方案1】:

    使用以下代码:

    df = pd.DataFrame( {'Symbol':['A','B','C'] ,
        'tagdatetime':['2020-03-01 01:00:00','2020-01-01 01:00:00','2020-06-01 01:00:00']})
    
    df['tagdatetime'] = pd.to_datetime(df['tagdatetime'], format='%Y-%m-%d %H:%M:%S')
    df.sort_values(by='tagdatetime', inplace=True)
    print(df)
    

    您需要在排序之前将列tagdatetime转换为日期时间格式,然后按列tagdatetime对值进行排序

    【讨论】:

    • 日期时间被 OP 正确解析 - 关键是更新 df,使用 inplace=Truedf = df.sort_values(by='tagdatetime')
    • 我发布的答案是笼统的,因此可以吸引更多的受众。 OP 清楚地提到他无法排序我已经在我的帖子中回答了这个问题。 OP 解析正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 2019-04-10
    • 2014-05-24
    • 2021-04-04
    相关资源
    最近更新 更多