我想进行时间序列分析,并且希望每个日期的每个子级别(level = delta_mins)都相反。所以基本上我想将df1转换为df2。
df1
date delta_mins A B C
2019-12-2 20 a1 b1 c1
30 a2 b2 c2
40 a3 b3 c3
50 a4 b4 c4
60 a5 b5 c5
2019-12-3 20 d1 e1 f1
30 d2 e2 f2
40 d3 e3 f3
50 d4 e4 f4
60 d5 e5 f5
2019-12-4 20 g1 h1 i1
30 g2 h2 i2
40 g3 h3 i3
50 g4 h4 i4
60 g5 h5 i5
转换为
df2
date delta_mins A B C
2019-12-2 60 a5 b5 c5
50 a4 b4 c4
40 a3 b3 c3
30 a2 b2 c2
20 a1 b1 c1
2019-12-3 60 d5 e5 f5
50 d4 e4 f4
40 d3 e3 f3
30 d2 e2 f2
20 d1 e1 f1
2019-12-4 60 g5 h5 i5
50 g4 h4 i4
40 g3 h3 i3
30 g2 h2 i2
20 g1 h1 i1
最佳答案
我相信您需要第二级的DataFrame.sort_index
和ascending=False
:
df = df.sort_index(level=[0, 1], ascending=[True, False])
print (df)
A B C
date delta_mins
2019-12-02 60 a5 b5 c5
50 a4 b4 c4
40 a3 b3 c3
30 a2 b2 c2
20 a1 b1 c1
2019-12-03 60 d5 e5 f5
50 d4 e4 f4
40 d3 e3 f3
30 d2 e2 f2
20 d1 e1 f1
2019-12-04 60 g5 h5 i5
50 g4 h4 i4
40 g3 h3 i3
30 g2 h2 i2
20 g1 h1 i1
如果不可能,您可以按
GroupBy.cumcount
和DataFrame.set_index
创建帮助程序级别,对其进行排序并最后删除它:df = (df.set_index(df.groupby(level=0).cumcount(), append=True)
.sort_index(level=[0, 2], ascending=[True, False])
.reset_index(level=2, drop=True))
print (df)
A B C
date delta_mins
2019-12-02 60 a5 b5 c5
50 a4 b4 c4
40 a3 b3 c3
30 a2 b2 c2
20 a1 b1 c1
2019-12-03 60 d5 e5 f5
50 d4 e4 f4
40 d3 e3 f3
30 d2 e2 f2
20 d1 e1 f1
2019-12-04 60 g5 h5 i5
50 g4 h4 i4
40 g3 h3 i3
30 g2 h2 i2
20 g1 h1 i1
关于python - 如何反转多索引数据框中的子级项目?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59372057/