【问题标题】:sorting dataframe by column name keeping first 3 columns as it is按列名对数据框进行排序,保持前 3 列不变
【发布时间】:2017-05-26 17:53:05
【问题描述】:

我有列的数据框

[u'Instructor Name', u'Product Name', u'Product Url', u' 2016.12.03',
u' 2016.12.05', u' 2016.12.01', u' 2016.12.12', u' 2016.12.16', 
u'2016.12.15', u' 2016.12.13', u' 2016.12.10', u' 2016.12.06', 
u'2016.12.14',u'2016.12.08', u' 2016.12.07', u' 2016.12.18', 
u'2016.12.11', u' 2016.12.04', u'2016.12.09', u' 2016.12.02', u' 2016.12.17']

我想对列进行排序,但只对“产品网址”中的列进行排序。我要输出

[u'Instructor Name', u'Product Name', u'Product Url',
       u' 2016.12.01', u' 2016.12.02', u' 2016.12.03', u' 2016.12.04',
       u' 2016.12.05', u' 2016.12.06', u' 2016.12.07', u' 2016.12.08',
       u' 2016.12.09', u' 2016.12.10', u' 2016.12.11', u' 2016.12.12',
       u' 2016.12.13', u' 2016.12.14', u' 2016.12.15', u' 2016.12.16',
       u' 2016.12.17', u' 2016.12.18', u' 2016.12.19']

怎么做。

【问题讨论】:

  • 你试过什么?
  • 另外,为什么你会有日期作为列名? hash 是从哪里来的?

标签: python pandas dataframe multiple-conditions


【解决方案1】:

我认为您需要转换datesto_datetimesort_values,如果需要dates,请使用date

df.columns = df.columns[:3].tolist() + 
            (pd.to_datetime(df.columns[3:], format='%Y.%m.%d')).sort_values().date.tolist()

示例:

cols = [u'Instructor Name', u'Product Name', u'Product Url', u' 2016.12.03', u' 2016.12.05', 
        u' 2016.12.01', u' 2016.12.12', u' 2016.12.16', u' 2016.12.15', u' 2016.12.13', 
        u' 2016.12.10', u' 2016.12.06', u'2016.12.14',u'2016.12.08', u' 2016.12.07', 
        u' 2016.12.18', u' 2016.12.11', u' 2016.12.04', u'2016.12.09',
 u' 2016.12.02', u' 2016.12.17']

df = pd.DataFrame(columns=cols) 
print (df)
Empty DataFrame
Columns: [Instructor Name, Product Name, Product Url,  
          2016.12.03,  2016.12.05,  2016.12.01,  2016.12.12,  2016.12.16,  2016.12.15,  
          2016.12.13,  2016.12.10,  2016.12.06, 2016.12.14, 2016.12.08,  2016.12.07,  
          2016.12.18,  2016.12.11,  2016.12.04, 2016.12.09,  2016.12.02,  2016.12.17]

Index: []

[0 rows x 21 columns]

df.columns = df.columns[:3].tolist() + 
             (pd.to_datetime(df.columns[3:], format='%Y.%m.%d')).sort_values().date.tolist()

print (df)
Empty DataFrame
Columns: [Instructor Name, Product Name, Product Url, 
          2016-12-01, 2016-12-02, 2016-12-03, 2016-12-04, 2016-12-05, 2016-12-06, 
          2016-12-07, 2016-12-08, 2016-12-09, 2016-12-10, 2016-12-11, 2016-12-12, 
          2016-12-13, 2016-12-14, 2016-12-15, 2016-12-16, 2016-12-17, 2016-12-18]
Index: []

[0 rows x 21 columns]

如果需要相同格式添加strftime:

df.columns = df.columns[:3].tolist() + 
             (pd.to_datetime(df.columns[3:], format='%Y.%m.%d')).sort_values().strftime('%Y.%m.%d').tolist()

print (df)
Empty DataFrame
Columns: [Instructor Name, Product Name, Product Url, 
          2016.12.01, 2016.12.02, 2016.12.03, 2016.12.04, 2016.12.05, 2016.12.06, 
          2016.12.07, 2016.12.08, 2016.12.09, 2016.12.10, 2016.12.11, 2016.12.12, 
          2016.12.13, 2016.12.14, 2016.12.15, 2016.12.16, 2016.12.17, 2016.12.18]
Index: []

[0 rows x 21 columns]

【讨论】:

    猜你喜欢
    • 2011-11-12
    • 2018-06-25
    • 1970-01-01
    • 2019-08-31
    • 2018-03-18
    • 2014-06-02
    • 2010-11-20
    相关资源
    最近更新 更多