I am curious how you would take a df similar to this and turn it into a dictionary with the unique classes as keys and their ages as the values.
Age | Class |
---|---|
27 | Science |
29 | English |
21 | Science |
30 | math |
22 | Science |
28 | math |
32 | math |
18 | Science |
15 | English |
Final solution may look like this:
dict = {
"Science": [27, 21, 22, 18],
"Math": [30, 28, 32],
"English": [29, 15]
I assume I have to start with the first class and create a key. Then iterate through the age cells and if their class value in their row is equal to the first key then copy that into the value associated with the key?
Thank you so much for your help!
CodePudding user response:
Assuming that ages are supposed to be unique (i.e. no double ages in the lists), you can simply group by class and get unique values of Age:
df.groupby("Class").Age.unique().apply(list).to_dict()
# out:
{'English': [29, 15], 'Science': [27, 21, 22, 18], 'math': [30, 28, 32]}
If you want to allow for double occurrences of ages (not relevant for your example), you can do something like:
df.groupby("Class").agg(list).Age.to_dict()
CodePudding user response:
Try with
df.groupby('Class')['Age'].agg(lambda x : x.unique().tolist()).to_dict()
Out[123]: {'English': [29, 15], 'Science': [27, 21, 22, 18], 'math': [30, 28, 32]}