Pandas在一个组内排序会导致重复索引

2024-05-14 21:01:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas数据帧,格式如下:

           C1        C2
A 0  1.764052  0.400157
  1  0.978738  2.240893
  2  1.867558 -0.977278
  3  0.950088 -0.151357
  4 -0.103219  0.410599
C 0  0.144044  1.454274
  1  0.761038  0.121675
  2  0.443863  0.333674
  3  1.494079 -0.205158
  4  0.313068 -0.854096

它由以下代码生成:

^{pr2}$

我想按列C1分别对每个组(第一个索引级别)进行排序,因此我使用groupby函数:

在数据框groupby(级别=0)。应用(lambda x:x.sort_值('C1'))

我得到的结果是:

             C1        C2
A A 4 -0.103219  0.410599
    3  0.950088 -0.151357
    1  0.978738  2.240893
    0  1.764052  0.400157
    2  1.867558 -0.977278
C C 0  0.144044  1.454274
    4  0.313068 -0.854096
    2  0.443863  0.333674
    1  0.761038  0.121675
    3  1.494079 -0.205158

为什么要复制第一级?是否有更好的方法在每个组内对数据进行排序?在


Tags: 数据方法lambda函数pandas排序格式级别
2条回答

您需要将参数group_keys=False添加到^{}

a = df.groupby(level=0, group_keys=False).apply(lambda x: x.sort_values('C1'))
print (a)
           C1        C2
A 4 -0.103219  0.410599
  3  0.950088 -0.151357
  1  0.978738  2.240893
  0  1.764052  0.400157
  2  1.867558 -0.977278
C 0  0.144044  1.454274
  4  0.313068 -0.854096
  2  0.443863  0.333674
  1  0.761038  0.121675
  3  1.494079 -0.205158

可以按列C1排序,然后按级别0对索引排序。您必须将sort_remaining参数指定给False,这样才能对多索引数据帧起作用:

df.sort_values('C1').sort_index(level = 0, sort_remaining=False)

enter image description here

相关问题 更多 >

    热门问题