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 中执行其他常见任务:

Pandas:如何按日期排序
Pandas:如何按名称对列进行排序
Pandas:如何按索引和列排序

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注