【发布时间】:2022-04-03 03:38:40
【问题描述】:
我有一个带有以下列的 pandas 数据框的数据框:
df = pd.DataFrame([
['A2', 2],
['B1', 1],
['A1', 2],
['A2', 1],
['B1', 2],
['A1', 1]],
columns=['one','two'])
我希望主要按“二”列排序,然后按“一”列排序。对于二级排序,我想使用自定义排序规则,该规则将按字母字符[A-Z] 对列“一”进行排序,然后是尾随数字[0-100]。所以,排序的结果是:
one two
A1 1
B1 1
A2 1
A1 2
B1 2
A2 2
在使用这样的排序规则之前,我已经对类似于列“一”的字符串列表进行了排序:
def custom_sort(value):
return (value[0], int(value[1:]))
my_list.sort(key=custom_sort)
如果我尝试通过 pandas 排序应用此规则,我会遇到许多问题,包括:
- pandas
DataFrame.sort_values()函数像 sort() 函数一样接受用于排序的键,但键函数应该是矢量化的(根据 pandas 文档)。如果我尝试将排序键仅应用于“一”列,则会收到错误 "TypeError: cannot convert the series to" - 当您使用 pandas
DataFrame.sort_values()方法时,它会将排序键应用于您传入的所有列。这将不起作用,因为我想首先使用本机数字排序按列“二”进行排序。
如上所述,我将如何对 DataFrame 进行排序?
【问题讨论】:
-
找到解决办法了吗?
-
接受的答案对我有用!
标签: python pandas dataframe sorting