【问题标题】: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')