Python中带键的sort_values()

gijlo24d  于 2023-01-06  发布在  Python
关注(0)|答案(5)|浏览(144)

我有一个 Dataframe ,其中的列名是时间(0:00,0:10,0:20,...,23:50)。现在,它们按照字符串顺序排序(0:00是第一个,9:50是最后一个),但我想按照时间排序(0:00是第一个,23:50是最后一个)。
如果 * time * 是列,则可以使用

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()--没有key参数真是太烦人了!!

6xfqseft

6xfqseft1#

尝试使用sorted内置函数对列进行排序,并将输出传递到 Dataframe 以进行索引。

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

希望这能帮上忙

aoyhnmkz

aoyhnmkz2#

只需在一位数的小时数前面加上一个前导零。这应该是最简单的解决方案,因为你可以简单地按词法排序。
例如5:30 -〉05:30。

mctunoxg

mctunoxg3#

下面是一个工作演示,它实现了@MartinKrämer的想法:

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
puruo6ea

puruo6ea4#

我知道这个问题已经有几年的历史了,但是由于它是这个问题的最佳Google结果,我想提供错误的根本原因。
在1.1.0版中,“key”参数被添加到sort_values中。请参阅下面链接的文档中的注解。
pandas.DataFrame.sort_values
如果您升级到1.1.0或更高版本,此功能将非常像您预期的那样工作。

mpgws1up

mpgws1up5#

带密钥的sort_values()似乎不起作用,但是带密钥的sort_index()可以起作用。参考Abdou enter image description here

相关问题