使用Python

时间:2017-05-04 15:27:05

标签: python python-3.x sorting pandas dataframe

我有一个数据框,其中列名是次(0:00,0:10,0:20,...,23:50)。现在,它们按照字符串顺序排序(所以0:00是第一个,9:50是最后一个)但是我想在时间之后对它们进行排序(因此0:00是第一个,23:50是最后一个)。

如果时间是一列,您可以使用

df = df.sort(columns='Time',key=float)

但是1)仅当 time 是一个列本身而不是列名时才有效,并且2)不推荐使用sort(),所以我尝试不使用它。

我正在尝试使用

df = df.sort_index(axis = 1)

但由于列名是字符串格式,因此它们会根据字符串键进行排序。我试过了

df = df.sort_index(key=float, axis=1) 

但是会出现错误消息:

Traceback (most recent call last):
  File "<ipython-input-112-5663f277da66>", line 1, in <module>
      df.sort_index(key=float, axis=1)
TypeError: sort_index() got an unexpected keyword argument 'key'

有没有人有关于如何解决这个问题的想法?那个烦恼的sort_index() - 和sort_values()就此而言 - 没有关键参数!!

4 个答案:

答案 0 :(得分:2)

只需将前导零加到一位数小时。这应该是最简单的解决方案,因为您可以简单地按词汇排序。

E.g。 5:30 - &gt; 05:30。

答案 1 :(得分:2)

尝试使用sorted内置函数对列进行排序,并将输出传递给数据帧以进行索引。以下内容应作为一个工作示例:

import pandas as pd


records = [(2, 33, 23, 45), (3, 4, 2, 4), (4, 5, 7, 19), (4, 6, 71, 2)]
df = pd.DataFrame.from_records(records, columns = ('0:00', '23:40', '12:30', '11:23'))
df
#    0:00  23:40  12:30  11:23
# 0     2     33     23     45
# 1     3      4      2      4
# 2     4      5      7     19
# 3     4      6     71      2

df[sorted(df,key=pd.to_datetime)]

#    0:00  11:23  12:30  23:40
# 0     2     45     23     33
# 1     3      4      2      4
# 2     4     19      7      5
# 3     4      2     71      6

我希望这会有所帮助

答案 2 :(得分:2)

这是一个工作演示,它实现了@MartinKrämer's idea

import re

In [259]: df
Out[259]:
   23:40  0:00  19:19  12:30  09:00  11:23
0     33     2      1     23     12     45
1      4     3      1      2     13      4
2      5     4      1      7     14     19
3      6     4      1     71     14      2

In [260]: df.rename(columns=lambda x: re.sub(r'^(\d{1})\:', r'0\1:', x)).sort_index(axis=1)
Out[260]:
   00:00  09:00  11:23  12:30  19:19  23:40
0      2     12     45     23      1     33
1      3     13      4      2      1      4
2      4     14     19      7      1      5
3      4     14      2     71      1      6

答案 3 :(得分:0)

我知道这个问题已经有几年了,但由于它是这个问题的顶级 Google 搜索结果,我想提供错误的根本原因。

'key' 参数在 1.1.0 版本中被添加到 sort_values。请参阅下面链接的文档中的注释。

here

如果您升级到 1.1.0 或更高版本,此功能将非常像您预期的那样工作。