0

What is the similar query to SELECT * FROM df WHERE id in (3,1,2) ORDER BY FIELD(id,3,1,2) in Pandas?


list_ids = [3, 1, 2]
df[df.id.isin(list_ids)]#.sort_by_field('id', list_ids)

afaik .sort_values() can only sort by columns that already in dataframe.

Note: I don't want to sort by multiple/list of columns. I want to sort ONE column by a specific list of values

luthfianto
  • 1,746
  • 3
  • 22
  • 37

1 Answers1

1

You can specify a list of columns to sort by inside sort_values()

df[df.id.isin(list_ids)].sort_values(["col1","col3","col2"], ascending=True)

If you want to order in some specific order, you can maybe create an additional column to do this.

order_list = [3,1,2]
order_dict = dict(zip(order_list , range(len(order_list ))))
df["sort_col"] = df["id"].map(order_dict)
df[df.id.isin(list_ids)].sort_values(["sort_col"], ascending=False)
Ángel Igualada
  • 891
  • 9
  • 13