【问题标题】:Sort dataframe by columns names if the columns are dates, pandas?如果列是日期,熊猫,按列名对数据框进行排序?
【发布时间】:2019-08-06 13:16:12
【问题描述】:

我的 df 列名称是这种格式的日期:dd-mm-yy。当我使用 sort_index(axis = 1) 时,它按前两位数字(指定日期)排序,因此按时间顺序排列没有意义。如何通过考虑月份来自动对其进行排序?

我的 df 标题:

submitted_at             06-05-18  13-05-18  29-04-18

我期望输出:

submitted_at             29-04-18  06-05-18  13-05-18

【问题讨论】:

    标签: python pandas sorting


    【解决方案1】:

    将列转换为日期时间并使用argsort 查找正确的顺序。这会将所有非日期按它们出现的顺序放在左侧,然后是排序的日期。

    import pandas as pd
    df = pd.DataFrame(columns=['submitted_at', '06-05-18', '13-05-18', '29-04-18'])
    
    idx = pd.to_datetime(df.columns, errors='coerce', format='%d-%m-%y').argsort()
    df.iloc[:, idx]
    

    Empty DataFrame
    Columns: [submitted_at, 29-04-18, 06-05-18, 13-05-18]
    

    【讨论】:

      【解决方案2】:

      将字符串转换为日期时间,然后用类似这样的方式对它们进行排序:

      from datetime import datetime
      cols_as_date = [datetime.strptime(x,'%d-%m-%Y') for x in df.columns]
      df = df[sorted(cols_as_data)]
      

      【讨论】:

        【解决方案3】:

        只需将您的列转换为 DateTime

        df['newdate']=pd.to_datetime(df.date,format='%d-%m-%y')
        

        然后使用 sort_values 对其进行排序

          df.sort_values(by='newdate')
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-08
          • 2018-03-18
          • 2020-11-06
          • 2017-05-16
          相关资源
          最近更新 更多