首页 > 解决方案 > 使用给定的输入列表对 DataFrame 列进行排序

问题描述

您好我想用给定的输入列表值对 DataFrame 列进行排序。我的清单看起来像:

inputlist
[309.0, 585.0, 221.0, 789.0, 195.0, 354.0, 307.0, 698.0, 426.0]

和 DataFrame 是:

  val    kaywords

195    keyword3
221    keyword5
307    keyword8
309    keyword9
354    keyword0
426    keyword1
585    keyword2
698    keyword4
789    keyword33

在这里,我想根据给定的“inputlist”对 DataFrame 列“val”进行排序。

我期待以下输出:

val    kaywords

309    keyword9
585    keyword2
221    keyword5
789    keyword33
195    keyword3
354    keyword0
307    keyword8
698    keyword4
426    keyword1

标签: pythonpandassortingdataframe

解决方案


使用 ordered categorical,但首先将 list 的值转换为整数:

inputlist = [309.0, 585.0, 221.0, 789.0, 195.0, 354.0, 307.0, 698.0, 426.0]

df['val'] = pd.Categorical(df['val'], ordered=True, categories=[int(x) for x in inputlist])
df = df.sort_values('val')
print (df)
   val   kaywords
3  309   keyword9
6  585   keyword2
1  221   keyword5
8  789  keyword33
0  195   keyword3
4  354   keyword0
2  307   keyword8
7  698   keyword4
5  426   keyword1

如果所有值都val存在于inputlist

inputlist = [int(x) for x in inputlist]
df = df.set_index('val').reindex(inputlist).reset_index()

推荐阅读