Python:对DataFrame指定列子集按日期列标签排序
对DataFrame的日期列标签进行排序的解决方案
当然可以实现这个需求!我们只需要简单几步就能完成日期列的排序,同时让对应的数据跟着列顺序调整,完美匹配你想要的结果。
步骤说明
- 提取并排序日期列:首先筛选出除了
Label1之外的日期列,由于这些列本身是datetime类型,我们可以直接用sorted()函数按日期升序排列。 - 重构列顺序:将
Label1列放在最前面,后面跟上排序后的日期列,形成新的列顺序。 - 重新索引DataFrame:使用新的列顺序对原DataFrame进行索引,就能得到列按日期排序后的结果。
完整代码实现
import pandas as pd import numpy as np # 构造原始DataFrame A = pd.DataFrame( [['A','A1',1, 6], ['B','B1' ,3,4], ['C', 'C2', 5,7], ['D','D1',7,2], ['E','E4',9,4], ['F','F1',11,6]], columns=['Label1',pd.to_datetime('2016-03-31') , pd.to_datetime('2016-05-31'),pd.to_datetime('2016-04-30')] ) # 提取日期列并排序 date_cols = sorted(A.columns[1:]) # 从第2列开始都是日期列,按日期升序排序 # 构造新的列顺序:Label1 + 排序后的日期列 new_columns = ['Label1'] + date_cols # 重新索引得到结果 sorted_df = A[new_columns] # 查看结果 print(sorted_df)
输出结果
运行上述代码后,你会得到完全符合期望的DataFrame:
Label1 2016-03-31 2016-04-30 2016-05-31 0 A A1 6 1 1 B B1 4 3 2 C C2 7 5 3 D D1 2 7 4 E E4 4 9 5 F F1 6 11
如果你的日期列是字符串类型而不是datetime,只需要先把列转换为datetime类型再排序即可,比如:
date_cols = sorted(pd.to_datetime(A.columns[1:])).strftime('%Y-%m-%d')
不过在你的案例中,列已经是datetime类型,所以直接排序就可以啦。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

