gpt4 book ai didi

python - 如何设置排序MultiIndex的顺序

转载 作者:行者123 更新时间:2023-12-04 08:41:16 24 4
gpt4 key购买 nike

我有这样的数据框:

import pandas as pd
import numpy as np

np.random.seed(123)

col_num = 1
row_num = 18
col_names = ['C' + str(x) for x in range(col_num)]

mix = pd.MultiIndex.from_product([['a', 'b'], [ '01 Jan 2011', '02 Feb 2000', '30 Apr 1999'], [1,2,3]])
df = pd.DataFrame(np.round(((np.random.rand(row_num,col_num)* 2 - 1)*100),2), columns = col_names, index = mix)
#df
C0
a 01 Jan 2011 1 39.29
2 -42.77
3 -54.63
02 Feb 2000 1 10.26
2 43.89
3 -15.38
30 Apr 1999 1 96.15
2 36.97
3 -3.81
b 01 Jan 2011 1 -21.58
2 -31.36
3 45.81
02 Feb 2000 1 -12.29
2 -88.06
3 -20.39
30 Apr 1999 1 47.60
2 -63.50
3 -64.91
如何以这样一种方式对 MultiIndex 进行排序,即在级别 1 上的日期按时间顺序保存,同时按原样保留其他混合级别的排序,包括级别排序的优先级(即:首先是级别 0,然后是级别 1,最后是级别 2)。
我需要在最终 df 中将日期保留为字符串。最终 df 将被腌制。我尝试在序列化之前设置日期的排序顺序,而不是在检索 df 后编写排序函数。

最佳答案

让我们创建一个新的 MultiIndex设置后 level 1映射到 datetime 的值然后使用 argsort在这个新索引上获取对原始数据框进行排序的索引:

idx = df.index.set_levels(pd.to_datetime(df.index.levels[1]), 1)
df1 = df.iloc[np.argsort(idx)]
print(df1)
C0
a 30 Apr 1999 1 96.15
2 36.97
3 -3.81
02 Feb 2000 1 10.26
2 43.89
3 -15.38
01 Jan 2011 1 39.29
2 -42.77
3 -54.63
b 30 Apr 1999 1 47.60
2 -63.50
3 -64.91
02 Feb 2000 1 -12.29
2 -88.06
3 -20.39
01 Jan 2011 1 -21.58
2 -31.36
3 45.81

关于python - 如何设置排序MultiIndex的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64557615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com