I have the following dataframe:
JavaScript
x
6
1
df = pd.DataFrame({'ID': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
2
'Name': ['name1', 'name2', 'name3', 'name4', 'name5', 'name6',
3
'name7', 'name8', 'name9', 'name10', 'name11', 'name12'],
4
'Category': ['A', 'A/B', 'B/C', 'A/B/C', 'A/B/C', 'B/C',
5
'A/B', 'A/B/C', 'A/B/C', 'B', 'C', 'A/C']})
6
I need to get a number of dataframes for each category. For instance, as output for category A:
JavaScript
1
6
1
df_a = pd.DataFrame({'ID': [1, 2, 4, 5, 7, 8, 9, 12],
2
'Name': ['name1', 'name2', 'name4', 'name5',
3
'name7', 'name8', 'name9', 'name12'],
4
'Category': ['A', 'A', 'A', 'A',
5
'A', 'A', 'A', 'A']})
6
Advertisement
Answer
Let’s split the categories, explode the data frame and groupby:
JavaScript
1
6
1
df_dicts = {k:v for k,v in (df.assign(Category=df['Category'].str.split('/'))
2
.explode('Category')
3
.groupby('Category')
4
)
5
}
6
And you get, for example df_dicts['A']
:
JavaScript
1
10
10
1
ID Name Category
2
0 1 name1 A
3
1 2 name2 A
4
3 4 name4 A
5
4 5 name5 A
6
6 7 name7 A
7
7 8 name8 A
8
8 9 name9 A
9
11 12 name12 A
10