我想进行时间序列分析,并且希望每个日期的每个子级别(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_indexascending=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.cumcountDataFrame.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/

10-11 07:19