我的 index 长这样:
MultiIndex([('2023-06-01 12:05:00', '1'), ('2023-06-01 12:05:00', '14'), ('2023-06-01 12:05:00', '2'), ('2023-06-01 12:05:00', '3'), ('2023-06-01 12:05:00', '4'), ('2023-06-01 12:05:00', '6'), ('2023-06-01 12:10:00', '1'), ('2023-06-01 12:10:00', '12'), ('2023-06-01 12:10:00', '14'), ('2023-06-01 12:10:00', '3'), ... ('2023-06-01 13:55:00', '1'), ('2023-06-01 13:55:00', '12'), ('2023-06-01 13:55:00', '13'), ('2023-06-01 13:55:00', '14'), ('2023-06-01 13:55:00', '15'), ('2023-06-01 13:55:00', '2'), ('2023-06-01 13:55:00', '3'), ('2023-06-01 13:55:00', '4'), ('2023-06-01 13:55:00', '6'), ('2023-06-01 13:55:00', '8')], names=['time', 'id'], length=207)
我想要每 5 分钟 按值的大小升序排序,也就是要变成这样:
MultiIndex([('2023-06-01 12:05:00', '1'), ('2023-06-01 12:05:00', '2'), ('2023-06-01 12:05:00', '3'), ('2023-06-01 12:05:00', '4'), ('2023-06-01 12:05:00', '6'), ('2023-06-01 12:05:00', '14'), ('2023-06-01 12:10:00', '1'), ('2023-06-01 12:10:00', '3'), ('2023-06-01 12:10:00', '12'), ('2023-06-01 12:10:00', '14'), ... ('2023-06-01 13:55:00', '1'), ('2023-06-01 13:55:00', '2'), ('2023-06-01 13:55:00', '3'), ('2023-06-01 13:55:00', '4'), ('2023-06-01 13:55:00', '6'), ('2023-06-01 13:55:00', '8') ('2023-06-01 13:55:00', '12'), ('2023-06-01 13:55:00', '13'), ('2023-06-01 13:55:00', '14'), ('2023-06-01 13:55:00', '15'),], names=['time', 'id'], length=207)
当然这个只是 index ,index 排序完之后 后面列的值要能跟着排序联动
不知道这样表达清楚了
1
ZedRover 2023-06-13 14:02:57 +08:00
你可以使用 Pandas 的 sort_index 函数来实现这个目标,但是在此之前,你需要确保'id'列的数据类型是整数。如果不是,你可以使用 astype 函数将其转换为整数。以下是一个示例:
import pandas as pd # 假设你的 DataFrame 是 df # 首先,确保'id'列是整数类型 df.index = df.index.set_levels(df.index.levels[1].astype(int), level=1) # 然后,对索引进行排序 df.sort_index(level=['time', 'id'], inplace=True) 这样,你的 DataFrame 将根据时间和 ID 进行排序,每 5 分钟内的 ID 将按升序排列。此操作还将影响 DataFrame 的行顺序,因此数据将与新的索引一起被重新排序。 需要注意的是,sort_index 函数的 level 参数允许你指定要排序的索引级别,你可以传入一个级别的列表来按照多个级别进行排序。在这个例子中,我首先按照'time'级别排序,然后按照'id'级别排序。inplace=True 意味着原地排序,也就是直接修改原始 DataFrame ,而不是创建一个新的 DataFrame 。 另外,使用 set_levels 函数可以修改 MultiIndex 的某一级别,这里我将'id'级别的值转换为整数类型。 |
2
Darcy90 2023-06-13 14:09:45 +08:00
可以使用 sort_values 方法来排序,但是需要注意,MultiIndex 的排序方式和单层 index 是不一样的。
下面是一个示例代码: import pandas as pd import numpy as np # 按时间升序排序,然后按值升序排序 df_sorted = df.sort_values(by=['time', 'a'], ascending=[True, True]) 其中,by 参数指定了按哪些列排序,ascending 参数指定排序的方式,True 表示升序,False 表示降序。 另外,注意到一点,这个排序是按照时间升序排序的,而不是按照每 5 分钟排序的。如果你需要按照每 5 分钟排序,可以先将时间列转化为字符串,然后取出前缀表示每 5 分钟的时间段,再排序。 |
3
encro 2023-06-13 14:11:05 +08:00
建议采用 chat gpt ,哈哈
|