如何按一列的值對 Pandas DataFrame 進行排序

  1. Dataframe 排序順序-引數 Ascending
  2. Dataframe 排序順序 - 引數 na_position

我們將介紹 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']))

我們按 col1dataframe 進行了排序。執行上面的程式碼後,你將獲得以下輸出。

    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 的位置.lastNaN 放在排序的最後,它的預設值是 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

相關文章 - Pandas DataFrame

  • 計數 Pandas 中每組的唯一值
  • 拆分 Pandas DataFrame