如何按照日期时间列对pandas数据框的行进行排序

3

使用以下代码,我期望数据框架(行)按照时间戳最早最近排序。像这样...

         #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

我尝试了许多其他解决方案,但似乎都不适用于我。 我做错了什么? 当我有两个或更多行具有相同的时间戳时,排序会发生什么?

请回答。

1个回答

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对值进行排序。


datetime 被 OP 正确解析 - 关键是要更新 df,可以使用 inplace=Truedf = df.sort_values(by='tagdatetime') - FObersteiner
我发布的答案是通用的,因此可以迎合更广泛的受众。原帖作者明确提到他无法进行排序,我在我的帖子中回答了这个问题。原帖作者已经正确解析了。 - Furqan Hashim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接