首先根据年份降序然后月份升序对 Pandas DataFrame 列进行排序

时间:2021-01-29 11:28:49

标签: python pandas

我的数据框具有如下所示的列名:

['GUD', 'ClientName', 'Account', 'C2', 'CalcTypeKey', 'Jan-19', 'Feb-19', 'Mar-19'、'Apr-19'、'May-19'、'Jun-19'、'Jul-19'、'Aug-19'、'Sep-19'、 'Oct-19'、'Nov-19'、'Dec-19'、'Jan-20'、'Feb-20'、'Mar-20'、'Apr-20'、 'May-20', 'Jun-20', 'Jul-20', 'Aug-20', 'Sep-20', 'Oct-20', 'Jan-19', 'Feb-19'、'Mar-19'、'Apr-19'、'May-19'、'Jun-19'、'Jul-19'、'Aug-19'、 'Sep-19'、'Oct-19'、'Nov-19'、'Dec-19'、'Jan-20'、'Feb-20'、'Mar-20'、 'Apr-20'、'May-20'、'Jun-20'、'Jul-20'、'Aug-20'、'Sep-20'、'Oct-20']

我希望它的订购方式如下: ['GUD', 'ClientName', 'Account', 'C2', 'CalcTypeKey', 'Jan-20', 'Feb-20', 'Mar-20'、'Apr-20'、'May-20'、'Jun-20'、'Jul-20'、'Aug-20'、'Sep-20'、 'Oct-20'、'Jan-19'、'Feb-19'、'Mar-19'、'Apr-19'、'May-19'、'Jun-19'、 'Jul-19'、'Aug-19'、'Sep-19'、'Oct-19'、'Nov-19'、'Dec-19'、'Jan-20'、 'Feb-20'、'Mar-20'、'Apr-20'、'May-20'、'Jun-20'、'Jul-20'、'Aug-20'、 'Sep-20'、'Oct-20'、'Jan-19'、'Feb-19'、'Mar-19'、'Apr-19'、'May-19'、 'Jun-19'、'Jul-19'、'Aug-19'、'Sep-19'、'Oct-19'、'Nov-19'、'Dec-19']

1 个答案:

答案 0 :(得分:0)

您可以转换为日期时间,根据需要转换值,然后argsort 列:

import pandas as pd

cols = ['GUD', 'ClientName', 'Account', 'C2', 'CalcTypeKey', 'Jan-19', 'Feb-19', 'Mar-19', 'Apr-19', 'May-19', 'Jun-19', 'Jul-19', 'Aug-19', 'Sep-19', 'Oct-19', 'Nov-19', 'Dec-19', 'Jan-20', 'Feb-20', 'Mar-20', 'Apr-20', 'May-20', 'Jun-20', 'Jul-20', 'Aug-20', 'Sep-20', 'Oct-20']
df = pd.DataFrame(columns=cols)

x = pd.to_datetime(cols[5:], format='%b-%y')
df = df.iloc[:, list(range(5)) + (((3000-x.year)*100 + x.month).to_numpy().argsort()+5).tolist()]

结果:

Columns: [GUD, ClientName, Account, C2, CalcTypeKey, Jan-20, Feb-20, Mar-20, Apr-20, May-20, Jun-20, Jul-20, Aug-20, Sep-20, Oct-20, Jan-19, Feb-19, Mar-19, Apr-19, May-19, Jun-19, Jul-19, Aug-19, Sep-19, Oct-19, Nov-19, Dec-19]

请注意,您的示例中有多个具有相同名称的列,这显然无法进行有意义的排序。这就是我删除它们的原因。