熊猫以系列值的降序重新索引多索引的索引

时间:2019-07-09 15:43:58

标签: python pandas

我有一个带有多个索引的熊猫系列:

A           385       0.463120
            278       0.269023
            190       0.244348
            818       0.232505
            64        0.199640
B           1889      0.381681
            1568      0.284957
            1543      0.259003
            1950      0.241432
            1396      0.197692
C           2485      0.859803
            2980      0.823075
            2588      0.774576
            2748      0.613309
            2055      0.607444
E           3081      0.815492
            3523      0.666928
            3638      0.628147
            3623      0.554344
            3400      0.506123

我想用熊猫重新索引第二个索引:

A           1         0.463120
            2         0.269023
            3         0.244348
            4         0.232505
            5         0.199640
B           1         0.381681
            2         0.284957
            3         0.259003
            4         0.241432
            5         0.197692
C           1         0.859803
            2         0.823075
            3         0.774576
            4         0.613309
            5         0.607444
D           1         0.815492
            2         0.666928
            3         0.628147
            4         0.554344
            5         0.506123

即第二个索引随着序列的值随着第一个索引的单个值的减小而增加。

有没有办法仅使用熊猫?

1 个答案:

答案 0 :(得分:1)

您可以使用pandas.core.groupby.GroupBy.cumcount

# create example data
df = pd.DataFrame({'a':list(pd.util.testing.rands_array(1, 4, dtype='O')) * 5,
                   'b':np.random.rand(20) // .1,
                   'c':np.random.rand(20) // .01}
                  )
df.set_index(['a','b'], inplace=True)


df = df.sort_values(['a','c'], ascending=[True,False])
df['x'] = df.groupby('a').cumcount()+1
df = df.reset_index().set_index(['a','x'])

返回

       b     c
a x           
a 1  5.0  89.0
  2  4.0  84.0
  3  2.0  83.0
  4  3.0  41.0
  5  4.0  30.0
k 1  7.0  70.0
  2  7.0  64.0
  3  9.0  46.0
  4  6.0  16.0
  5  4.0   8.0
p 1  5.0  71.0
  2  7.0  70.0
  3  6.0  54.0
  4  0.0  16.0
  5  7.0   1.0
w 1  6.0  61.0
  2  2.0  57.0
  3  3.0  53.0
  4  6.0  38.0
  5  0.0  22.0