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)

輸出結果:shell

 col2 col1 1 1.069838 0.096230 4 -0.542406 -0.219829 6 -0.071661 0.392091 2 1.399976 -0.472169 3 0.428372 -0.624630 5 0.471875 0.966560 9 -0.131851 -1.254495 8 1.180651 0.199548 0 0.906202 0.418524 7 0.124800 2.011962
 

df數據值中,標籤和值未排序。下面來看看如何按標籤來排序。dom

 

按標籤排序

使用sort_index()方法,經過傳遞axis參數和排序順序,能夠對DataFrame進行排序。 默認狀況下,按照升序對行標籤進行排序。ui

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)

輸出結果:spa

col2 col1 0 0.431384 -0.401538 1 0.111887 -0.222582 2 -0.166893 -0.237506 3 0.476472 0.508397 4 0.670838 0.406476 5 2.065969 -0.324510 6 -0.441630 1.060425 7 0.735145 0.972447 8 -0.051904 -1.112292 9 0.134108 0.759698
 

排序順序

  經過將布爾值傳遞給升序參數,能夠控制排序順序。 code

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)

輸出結果:blog

col2 col1 9 0.750452 1.754815 8 0.945238 2.079394 7 0.345238 -0.162737 6 -0.512060 0.887094 5 1.163144 0.595402 4 -0.063584 -0.185536 3 -0.275438 -2.286831 2 -1.504792 -1.222394 1 1.031234 -1.848174 0 -0.615083 0.784086
 

按列排列

  經過傳遞axis參數值爲01,能夠對列標籤進行排序。 默認狀況下,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 1 -0.997962 0.736707 4 1.196464 0.703710 6 -0.387800 1.207803 2 1.614043 0.356389 3 -0.057181 -0.551742 5 1.034451 -0.731490 9 -0.564355 0.892203 8 -0.763526 0.684207 0 -1.213615 1.268649 7 0.316543 -1.450784
 

按值排序

sort_values()是按值排序的方法。它接受一個by參數,它將使用要與其排序值的DataFrame的列名稱。pandas

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()提供了從mergeesortheapsortquicksort中選擇算法的一個配置。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
相關文章
相關標籤/搜索