python - Python 中带键的 sort_values()

标签 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() 就此而言非常烦人 - 没有关键参数!

最佳答案

尝试使用 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

希望对你有帮助

关于python - Python 中带键的 sort_values(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43787091/

相关文章:

python - 如何在按钮上添加单独的 Html 元素单击 Python Dash

python - Pandas 如何阅读子标题

c - 如何使用文件输入对数组进行排序?

Python - 使用 Set-Cookie 来使用 cookie 不起作用

python - 获取类型错误 : __init__() missing 1 required positional argument: 'on_delete' when trying to add parent table after child table with entries

python - 在 django 模板中输出排序的 python 字典

java - 第 K 个元素 N*N 和 vector

python - 从列表中删除项目(for 循环),但如果不调用 list.copy() 则会出现索引外错误

python - 有没有办法删除群组的特定内容?

python - 如何将 python csv.DictReader 与二进制文件一起使用? (对于一个babel自定义提取方法)