Pandas:如何根据字符串列对 dataframe 进行排序
您可以使用以下方法根据特定字符串列的值对 pandas DataFrame 的行进行排序:
方法一:按字符串列排序(当该列仅包含字符时)
df = df. sort_values (' my_string_column ')
方法二:按字符串列排序(当列包含字符和数字时)
#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:按字符串列排序(当该列仅包含字符时)
假设我们有以下 pandas DataFrame,其中包含有关杂货店各种产品销售的信息:
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
我们可以使用以下语法根据产品列中的字符串对 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
请注意,现在根据“产品”列中的字符串对行进行 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
请注意,行现在根据“产品”列中的字符串从 Z 到 A 排序。
示例2:按字符串列排序(当列包含字符和数字时)
假设我们有以下 pandas DataFrame,其中包含有关杂货店各种产品销售的信息:
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
请注意,产品列中的字符串同时包含字符和数字。
如果我们尝试使用产品列中的值对 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
相反,我们需要创建一个名为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()函数的完整文档。
其他资源
以下教程解释了如何在 pandas 中执行其他常见任务: