我有一个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

它由以下代码生成:
import pandas as pd
import numpy as np
idx = pd.MultiIndex.from_product([['A','C'],range(5)])
np.random.seed(0)
df = pd.DataFrame(index=idx, data = np.random.randn(len(idx), 2), columns=['C1','C2'])

我想按C1列对每个组(第一个索引级别)分别进行排序,因此我使用groupby函数:
df.groupby(level=0.apply(lambda x:x.sort_values('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

为什么要复制第一级有没有更好的方法来对每组中的数据进行排序?

最佳答案

您需要将参数group_keys=False添加到groupby

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

10-05 20:43
查看更多