使用给定的输入列表对数据帧列排序

2024-05-07 03:30:26 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我想用给定的输入列表值对DataFrame列进行排序。 我的列表如下所示:

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

数据帧是:

  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

Tags: dataframe列表排序valinputlistkeyword2keyword1keyword4
3条回答

也许最简洁的方法是将val定义为索引,然后按inputlist的顺序调用它:

df.set_index('val').loc[inputlist, :]

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

index = {int(j):i for i,j in enumerate(input_list)}

df = pd.DataFrame({"val":[195, 221, 307, 309, 354, 426, 585, 698, 789]})

df["sort"] = df.apply(lambda row: index[row.val], axis=1)


df = df.sort_values(by=['sort'])

df = df.drop("sort", axis=1)

使用有序的categorical,但首先将列表的值转换为整数:

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()

相关问题 更多 >