【问题标题】:Pandas: How to sort dataframe rows by date of one column熊猫:如何按一列的日期对数据框行进行排序
【发布时间】:2018-07-10 18:01:59
【问题描述】:

所以我有两个不同的数据框,我将两者连接起来。所有列都相同;但是,日期列具有 M/D/YR 格式的各种不同日期。

数据框日期在序列的后面会被打乱

有没有办法保留整个数据框本身并根据日期列中的日期对进行排序。我也想保留日期的格式。

基本上是这样

date        people
6/8/2015    1
7/10/2018   2
6/5/2015    0

转换成:

date          people
6/5/2015      0
6/8/2015      1
7/10/2018     2

谢谢!

PS:我已经尝试了其他帖子中的选项,但它不起作用

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    试图详细说明可以做什么: 初始化/合并数据框并将列转换为日期时间类型

    df= pd.DataFrame({'people':[1,2,0],'date': ['6/8/2015','7/10/2018','6/5/2015',]})
    df.date=pd.to_datetime(df.date,format="%m/%d/%Y")
    print(df)
    

    输出:

       date      people
    0   2015-06-08  1
    1   2018-07-10  2
    2   2015-06-05  0
    

    按日期排序

    df=df.sort_values('date')
    print(df)
    

    输出:

        date    people
    2   2015-06-05  0
    0   2015-06-08  1
    1   2018-07-10  2
    

    再次维护格式:

    df['date']=df['date'].dt.strftime('%m/%d/%Y')
    print(df)
    

    输出:

        date    people
    2   06/05/2015  0
    0   06/08/2015  1
    1   07/10/2018  2
    

    【讨论】:

    • 由于最终会在日期前添加一些前导 '0',您可以改为创建一个 dummy_date 列,即 datetime,按此排序,然后将其删除,以使 date 真正保持不变.但同样的基本思想:D
    【解决方案2】:

    尝试将“日期”列更改为 pandas 日期时间,然后排序

    import pandas as pd
    df= pd.DataFrame({'people':[1,1,1,2],'date': 
    ['4/12/1961','5/5/1961','7/21/1961','8/6/1961']})
    df['date'] =pd.to_datetime(df.date)
    df.sort_values(by='date')
    

    输出:

    date       people
    
    1961-04-12  1
    
    1961-05-05  1
    
    1961-07-21  1
    
    1961-08-06  2
    

    要恢复初始格式:

    df['date']=df['date'].dt.strftime('%m/%d/%y')
    

    输出:

    date    people
    04/12/61    1
    
    05/05/61    1
    
    07/21/61    1
    
    08/06/61    2
    

    【讨论】:

    • 谢谢。我又添加了一行代码来获取初始格式并打印输出
    【解决方案3】:

    为什么不简单呢?

    dataset[SortBy["date"]]
    

    您能提供您尝试过的方法或您的结构吗?

    如果您需要以相反的顺序排序:

    dataset[SortBy["date"]][Reverse]
    

    【讨论】:

    • SortBy 是什么?它在哪里定义?和Reverse ?这个答案怎么会有 3 个赞?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 2019-04-10
    • 2018-07-05
    • 2021-04-04
    相关资源
    最近更新 更多