Lex排序大熊猫系列/数据帧

时间:2017-09-18 09:36:28

标签: python pandas sorting dataframe lexicographic

嗨我有一个数据框,其中包含以下值作为输入

{1,20,21,10,100,1000,30}

我需要将输出排序为{1,10,100,1000,20,21,30}

执行此操作的最佳方法是,我有超过20000个值以上述格式排序。

我尝试了sort_values,但没有帮助。

由于

1 个答案:

答案 0 :(得分:1)

给出一系列形式:

s

0       1
1      20
2      21
3      10
4     100
5    1000
6      30
dtype: int64

要对此系列进行排序,您需要首先转换为字符串,然后调用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调用之前保持演员。