Pandas: 文字列列に基づいて dataframe を並べ替える方法
次のメソッドを使用して、特定の文字列列の値に基づいて pandas DataFrame の行を並べ替えることができます。
方法 1: 文字列列で並べ替える (列に文字のみが含まれる場合)
df = df. sort_values (' my_string_column ')
方法 2: 文字列列で並べ替える (列に文字と数字が含まれる場合)
#create 'sort' column that contains digits from 'my_string_column' df[' sort '] = df[' my_string_column ']. str . extract (' (\d+) ', expand= False ). astype (int) #sort rows based on digits in 'sort' column df = df. sort_values (' sort ')
次の例は、各メソッドを実際に使用する方法を示しています。
例1: 文字列列によるソート(列に文字のみが含まれる場合)
食料品店でのさまざまな商品の販売に関する情報を含む次のパンダ データフレームがあるとします。
import pandas as pd #createDataFrame df = pd. DataFrame ({' product ': ['Apples', 'Oranges', 'Bananas', 'Lettuce', 'Beans'], ' sales ': [18, 22, 19, 14, 29]}) #view DataFrame print (df) product sales 0 Apples 18 1 Oranges 22 2 Bananas 19 3 Lettuce 14 4 Beans 29
次の構文を使用して、 product列の文字列に基づいて DataFrame の行を並べ替えることができます。
#sort rows from A to Z based on string in 'product' column
df = df. sort_values (' product ')
#view updated DataFrame
print (df)
product sales
0 Apples 18
2 Bananas 19
4 Beans 29
3 Lettuce 14
1 Oranges 22
Product列の文字列に基づいて行が A から Z に並べ替えられることに注意してください。
代わりに Z から A に並べ替えたい場合は、単に引数ascending=Falseを追加します。
#sort rows from Z to A based on string in 'product' column
df = df. sort_values (' product ', ascending= False )
#view updated DataFrame
print (df)
product sales
1 Oranges 22
3 Lettuce 14
4 Beans 29
2 Bananas 19
0 Apples 18
Product列の文字列に基づいて行が Z から A に並べ替えられることに注意してください。
例 2: 文字列列によるソート (列に文字と数字が含まれる場合)
食料品店でのさまざまな商品の販売に関する情報を含む次のパンダ データフレームがあるとします。
import pandas as pd #createDataFrame df = pd. DataFrame ({' product ': ['A3', 'A5', 'A22', 'A50', 'A2', 'A7', 'A9', 'A13'], ' sales ': [18, 22, 19, 14, 14, 11, 20, 28]}) #view DataFrame print (df) product sales 0 A3 18 1 A5 22 2 A22 19 3 A50 14 4 A2 14 5 A7 11 6 A9 20 7 A13 28
製品列の文字列には文字と数字の両方が含まれることに注意してください。
product列の値を使用して DataFrame の行を並べ替えようとすると、文字列は数値に基づいて正しい順序で並べ替えられません。
import pandas as pd #sort rows based on strings in 'product' column df = df. sort_values (' product ') #view updated DataFrame print (df) product sales 7 A13 28 4 A2 14 2 A22 19 0 A3 18 1 A5 22 3 A50 14 5 A7 11 6 A9 20
代わりに、product 列の数値のみを含むsortという新しい一時列を作成し、 sort列の値で並べ替えてから、列を完全に削除する必要があります。
import pandas as pd #create new 'sort' column that contains digits from 'product' column df[' sort '] = df[' product ']. str . extract (' (\d+) ', expand= False ). astype (int) #sort rows based on digits in 'sort' column df = df. sort_values (' sort ') #drop 'sort' column df = df. drop (' sort ', axis= 1 ) #view updated DataFrame print (df) product sales 4 A2 14 0 A3 18 1 A5 22 5 A7 11 6 A9 20 7 A13 28 2 A22 19 3 A50 14
行が製品列の文字列によって並べ替えられ、数値が正しい順序で並べ替えられることに注目してください。
注: pandas sort_values()関数の完全なドキュメントはここで見つけることができます。
追加リソース
次のチュートリアルでは、パンダで他の一般的なタスクを実行する方法を説明します。