Lex 排序 pandas series/dataframe
Lex-sorting a pandas series/dataframe
您好,我有一个数据框,其中包含以下值作为输入
{1,20,21,10,100,1000,30}
我需要将输出排序为 {1,10,100,1000,20,21,30}
执行此操作的最佳方法是什么,我有超过 20000 个值要按上述格式排序。
我试过 sort_values 但没用。
谢谢
给定一系列的形式:
s
0 1
1 20
2 21
3 10
4 100
5 1000
6 30
dtype: int64
要对这个系列进行 lex 排序,您需要先转换为字符串,然后 然后 调用 sort_values
.
s.astype(str).sort_values()
0 1
3 10
4 100
5 1000
1 20
2 21
6 30
dtype: object
对于数据框,您必须执行类似的操作:
df['Col'] = df['Col'].astype(str)
df.sort_values(subset=['Col'])
df['Col'] = pd.to_numeric(df['Col'])
作为对此的改进,我建议将 argsort 用于此任务,然后使用 iloc
.
进行一些索引魔术
idx = df['Col'].astype(str).argsort()
df = df.iloc[idx]
使用这种方法,您不必在 sort_values
调用之前坚持转换。
您好,我有一个数据框,其中包含以下值作为输入
{1,20,21,10,100,1000,30}
我需要将输出排序为 {1,10,100,1000,20,21,30}
执行此操作的最佳方法是什么,我有超过 20000 个值要按上述格式排序。
我试过 sort_values 但没用。
谢谢
给定一系列的形式:
s
0 1
1 20
2 21
3 10
4 100
5 1000
6 30
dtype: int64
要对这个系列进行 lex 排序,您需要先转换为字符串,然后 然后 调用 sort_values
.
s.astype(str).sort_values()
0 1
3 10
4 100
5 1000
1 20
2 21
6 30
dtype: object
对于数据框,您必须执行类似的操作:
df['Col'] = df['Col'].astype(str)
df.sort_values(subset=['Col'])
df['Col'] = pd.to_numeric(df['Col'])
作为对此的改进,我建议将 argsort 用于此任务,然后使用 iloc
.
idx = df['Col'].astype(str).argsort()
df = df.iloc[idx]
使用这种方法,您不必在 sort_values
调用之前坚持转换。