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