给定DataFrame:
import pandas as pd
df = pd.DataFrame([6, 4, 2, 4, 5], index=[2, 6, 3, 4, 5], columns=['A'])
结果是:
A
2 6
6 4
3 2
4 4
5 5
现在,我想按列A和索引的值进行排序。
例如
df.sort_values(by='A')
退货
A
3 2
6 4
4 4
5 5
2 6
我想
A
3 2
4 4
6 4
5 5
2 6
如何在列上首先排序,然后在索引上排序?
使用lexsort
numpy可能是另一种方式,并且速度也稍慢一些:
df.iloc[np.lexsort((df.index, df.A.values))] # Sort by A.values, then by index
结果:
A
3 2
4 4
6 4
5 5
2 6
与timeit
:
%%timeit
df.iloc[np.lexsort((df.index, df.A.values))] # Sort by A.values, then by index
结果:
1000 loops, best of 3: 278 µs per loop
使用重置索引并再次设置索引:
%%timeit
df.reset_index().sort_values(by=['A','index']).set_index('index')
结果:
100 loops, best of 3: 2.09 ms per loop
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句