【问题标题】:Lex-sorting a pandas series/dataframe对熊猫系列/数据框进行 Lex 排序
【发布时间】:2017-09-18 09:36:28
【问题描述】:

您好,我有一个数据框,它具有以下值作为输入

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

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

最好的方法是什么,我有超过 20000 个值以上述格式排序。

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

谢谢

【问题讨论】:

  • 那不是数据框。你能澄清一下你想要什么吗?
  • 如果它一个数据框,你会做df['col'].astype(str).sort_values() - 字符串转换确保词法排序。
  • 我只在数据框中有它,我刚刚给出了该格式的数据框。
  • 好吧,往下看,我已经对这个问题进行了尝试,虽然不清楚。

标签: python pandas sorting dataframe lexicographic


【解决方案1】:

给定一系列形式:

s

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

要对这个系列进行 lex-sort,您需要先转换为字符串,然后然后调用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 之前保留演员表。

【讨论】:

  • 如此如此如此准确
  • @Bharathshetty 有趣的事实:你可以在这里利用df.argsort
  • df[0].astype(str).sort_values().astype(int) 也许但我喜欢 argsort
猜你喜欢
  • 2012-08-21
  • 1970-01-01
  • 2014-12-29
  • 2019-04-12
  • 2015-11-06
  • 2018-07-08
  • 2021-10-08
  • 1970-01-01
相关资源
最近更新 更多