Pandas | 10 排序
Pandas有两种排序方式,它们分别是 -
- 按标签
- 按实际值
import pandas as pd import numpy as np df=pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],columns=[‘col2‘,‘col1‘]) print (df)
输出结果:
col2 col1 1.069838 0.096230 -0.542406 -0.219829 -0.071661 0.392091 1.399976 -0.472169 0.428372 -0.624630 0.471875 0.966560 -0.131851 -1.254495 1.180651 0.199548 0.906202 0.418524 0.124800 2.011962
在df
数据值中,标签和值未排序。下面来看看如何按标签来排序。
按标签排序
使用sort_index()
方法,通过传递axis
参数和排序顺序,可以对DataFrame
进行排序。 默认情况下,按照升序对行标签进行排序。
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],columns = [‘col2‘,‘col1‘]) sorted_df=df.sort_index() print (sorted_df)
输出结果:
col2 col1 0.431384 -0.401538 0.111887 -0.222582 -0.166893 -0.237506 0.476472 0.508397 0.670838 0.406476 2.065969 -0.324510 -0.441630 1.060425 0.735145 0.972447 -0.051904 -1.112292 0.134108 0.759698
排序顺序
通过将布尔值传递给升序参数,可以控制排序顺序。
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],columns = [‘col2‘,‘col1‘]) sorted_df = df.sort_index(ascending=False) print (sorted_df)
输出结果:
col2 col1 0.750452 1.754815 0.945238 2.079394 0.345238 -0.162737 -0.512060 0.887094 1.163144 0.595402 -0.063584 -0.185536 -0.275438 -2.286831 -1.504792 -1.222394 1.031234 -1.848174 -0.615083 0.784086
按列排列
通过传递axis
参数值为0
或1
,可以对列标签进行排序。 默认情况下,axis = 0
,逐行排列。
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],columns = [‘col2‘,‘col1‘]) sorted_df=df.sort_index(axis=1) print (sorted_df)
输出结果:
col1 col2 -0.997962 0.736707 1.196464 0.703710 -0.387800 1.207803 1.614043 0.356389 -0.057181 -0.551742 1.034451 -0.731490 -0.564355 0.892203 -0.763526 0.684207 -1.213615 1.268649 0.316543 -1.450784
按值排序
sort_values()
是按值排序的方法。它接受一个by
参数,它将使用要与其排序值的DataFrame
的列名称。
import pandas as pd import numpy as np df = pd.DataFrame({‘col1‘:[2,1,1,1],‘col2‘:[1,3,2,4]}) sorted_df = df.sort_values(by=‘col1‘) print (sorted_df)
输出结果:
col1 col2 1 1 3 2 1 2 3 1 4 0 2 1
注意: 观察上面的输出结果,
col1
值被排序,相应的col2
值和行索引将随col1
一起改变。因此,它们看起来没有排序。
可以传递多个列,前列相同的情况下,排后列
import pandas as pd import numpy as np df = pd.DataFrame({‘col1‘:[2,1,1,1],‘col2‘:[1,3,2,4]}) sorted_df = df.sort_values(by=[‘col1‘,‘col2‘]) print (sorted_df)
输出结果:
col1 col2 2 1 2 1 1 3 3 1 4 0 2 1
排序算法
sort_values()
提供了从mergeesort
,heapsort
和quicksort
中选择算法的一个配置。Mergesort
是唯一稳定的算法。
import pandas as pd import numpy as np df = pd.DataFrame({‘col1‘:[2,1,1,1],‘col2‘:[1,3,2,4]}) sorted_df = df.sort_values(by=‘col1‘ ,kind=‘mergesort‘) print (sorted_df)
输出结果:
col1 col2 1 1 3 2 1 2 3 1 4 0 2 1