1

I have the following dataframe:

    Group SubGroup
0  GroupA       A1
1  GroupA       A2
2  GroupA       A3
3  GroupB       B1
4  GroupB       B2
5  GroupC       C1

How do I transform this Dataframe in a dictionary? My expected output is as follows:

{'GroupA': ['A1', 'A2', 'A3'], 'GroupB': ['B1', 'B2'], 'GroupC': ['C1']}
U13-Forward
  • 69,221
  • 14
  • 89
  • 114

3 Answers3

1

you can use groupby and then to_dict function:

In [2]: df = pd.DataFrame({'group':['A','A','A','B','B','C'], 'subgrroup':['A1','A2','A3','B1','B2','C1']})

In [3]: df
Out[3]: 
  group subgrroup
0     A        A1
1     A        A2
2     A        A3
3     B        B1
4     B        B2
5     C        C1

In [5]: df2 = df.groupby('group')['subgrroup'].apply(list)

In [6]: df2
Out[6]: 
group
A    [A1, A2, A3]
B        [B1, B2]
C            [C1]
Name: subgrroup, dtype: object

In [7]: df2.to_dict()
Out[7]: {'A': ['A1', 'A2', 'A3'], 'B': ['B1', 'B2'], 'C': ['C1']}
Rajat Mishra
  • 3,635
  • 4
  • 27
  • 41
1
df.groupby('Group')['SubGroup'].apply(list).to_dict()
ziying35
  • 1,190
  • 3
  • 6
0

You could try pd.DataFrameGroupBy.keys with a dictionary comprehension:

>>> {k: df.loc[v, 'SubGroup'].tolist() for k, v in df.groupby('Group').groups.items()}
{'GroupA': ['A1', 'A2', 'A3'], 'GroupB': ['B1', 'B2'], 'GroupC': ['C1']}
>>> 

Or try pd.SeriesGroupBy.agg:

>>> dict(df.groupby('Group')['SubGroup'].agg(list))
{'GroupA': ['A1', 'A2', 'A3'], 'GroupB': ['B1', 'B2'], 'GroupC': ['C1']}
>>> 

Even better with to_dict:

>>> df.groupby('Group')['SubGroup'].agg(list).to_dict()
{'GroupA': ['A1', 'A2', 'A3'], 'GroupB': ['B1', 'B2'], 'GroupC': ['C1']}
>>> 
U13-Forward
  • 69,221
  • 14
  • 89
  • 114