0

I have a dataframe below:

import pandas as pd
df = pd.DataFrame({"Name":["Jack","Joe","Al","Al","Joe","Jack","Jack"],"X1":[1,4,6,5,7,9,2]})

I made a different dataframe for each value in the "Name" column.

dic = {}
k=1
for i in set(df.Name):
    dic[k] = df.loc[df.Name == i]
    dic[k].reset_index(inplace=True)
    dic[k].drop(columns="index",inplace = True)
    k += 1

Now keys are "Jack","Joe" and "Al", values are dataframes.

But keys order change every time when I run the code. Is there any way to fix key order?

burhancigdem
  • 105
  • 3
  • Have you seen this topic here https://stackoverflow.com/questions/5629023/the-order-of-keys-in-dictionaries . – Mayhem Sep 22 '20 at 08:54
  • before python 3.6 dict is unordered collection. And in 3.6. order-preserving is implementation detail and should not be relied upon. It looks like you run version before 3.6. Use `OrderedDict` from collections. – buran Sep 22 '20 at 08:56
  • @buran my version is 3.7.7. – burhancigdem Sep 22 '20 at 09:03
  • sorry, I overlooked you apply `set()` on `df.Name` set is unordered collection – buran Sep 22 '20 at 09:10

1 Answers1

2

Dictionaries are not for ordering by keys. Use OrderedDict instead:

import collections
ordered = collections.OrderedDict(sorted(dic.items()))
F.NiX
  • 1,457
  • 3
  • 12
  • 20
  • Dicts were unordered before python 3.6. And in 3.6. order-preserving is implementation detail and should not be relied upon. Starting from 3.7 order is preserved – buran Sep 22 '20 at 08:57