我有一个带有多个索引的熊猫系列:
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
即第二个索引随着序列的值随着第一个索引的单个值的减小而增加。
有没有办法仅使用熊猫?
答案 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