如何按一列的值對 Pandas DataFrame 進行排序
Asad Riaz
2023年1月30日
我們將介紹 pandas.DataFrame.sort_values
方法來對 DataFrame
值進行排序,以及類似 ascending
選項來指定排序順序,以及 na_position
來確定 NaN 在排序結果中的位置。
參考下面的 DataFrame
,
import pandas as pd
df = pd.DataFrame(
{
"col1": ["g", "t", "n", "w", "n", "g"],
"col2": [5, 2, 5, 1, 3, 6],
"col3": [0, 7, 2, 8, 1, 2],
}
)
print(df)
如果執行此程式碼,你將得到以下尚未排序的輸出。
col1 col2 col3
0 g 5 0
1 t 2 7
2 n 5 2
3 w 1 8
4 n 3 1
5 g 6 2
現在我們可以使用以下程式碼對 DataFrame
進行排序。
import pandas as pd
df = pd.DataFrame(
{
"col1": ["g", "t", "n", "w", "n", "g"],
"col2": [5, 2, 5, 1, 3, 6],
"col3": [0, 7, 2, 8, 1, 2],
}
)
print(df.sort_values(by=["col1"]))
我們按 col1
對 DataFrame
進行了排序。執行上面的程式碼後,你將獲得以下輸出。
col1 col2 col3
0 g 5 0
5 g 6 2
2 n 5 2
4 n 3 1
1 t 2 7
3 w 1 8
我們也可以使用多個列進行排序,讓我們如下更改上述程式碼的最後一行,
print(df.sort_values(by=["col1", "col2"]))
執行程式碼後,我們將獲得以下輸出。
col1 col2 col3
0 g 5 0
5 g 6 2
4 n 3 1
2 n 5 2
1 t 2 7
3 w 1 8
現在,DataFrame
也通過 col2
進一步排序。
DataFrame
排序順序-引數 Ascending
預設情況下,排序按升序排列,要按降序更改 DataFrame
,我們需要設定標誌 ascending=False
。
print(df.sort_values(by=["col1", "col2"], ascending=False))
執行程式碼後,我們將獲得以下輸出。
col1 col2 col3
3 w 1 8
1 t 2 7
2 n 5 2
4 n 3 1
5 g 6 2
0 g 5 0
DataFrame
排序順序 - 引數 na_position
na_position
在排序後指定 NaN
的位置.last
將 NaN
放在排序的最後,它的預設值是 first
,將 NaN
放在排序結果的開頭。
參考下面的 DataFrame
,
import numpy as np
import pandas as pd
s = pd.Series([np.nan, 2, 4, 10, 7])
print(s.sort_values(na_position="last"))
執行程式碼後,我們將獲得以下輸出。
1 2.0
2 4.0
4 7.0
3 10.0
0 NaN