I am trying to split my Dataframe such that each Dataframe is for a product. Given below is how my Dataframe looks like:
JavaScript
x
5
1
row_label, jan, feb, mar, apr
2
prod_a, 100, 120, 123, 150
3
prod_b, 123, 233, 200, 40
4
prod_c, 10, 23, 34, 33
5
Expected output:
Dataframe for prod_a
JavaScript
1
6
1
row_label, value
2
jan, 100
3
feb, 120
4
mar, 123
5
apr, 150
6
Dataframe for prod_b
JavaScript
1
6
1
row_label, value
2
jan, 123
3
feb, 233
4
mar, 200
5
apr, 40
6
Dataframe for prod_c
JavaScript
1
6
1
row_label, value
2
jan, 10
3
feb, 23
4
mar, 34
5
apr, 33
6
Advertisement
Answer
I suggest here create dictionary of DataFrames in dictionary comprehension:
JavaScript
1
6
1
df1 = df.set_index('row_label').T
2
3
dfs = {x: df1[x].to_frame(name='value') for x in df1.columns}
4
5
print (dfs['prod_a'])
6
Variables from strings are not recommended, but possible, e.g. with globals
:
JavaScript
1
5
1
for x in df1.columns:
2
globals()[x] = df1[x].to_frame('value')
3
4
print (prod_a)
5
Another idea with groupby
, thank you @Lunalo John for idea:
JavaScript
1
8
1
dfs = {k: v.T for k, v in df.set_index('row_label').groupby('row_label')}
2
print (dfs['prod_a'])
3
row_label prod_a
4
jan 100
5
feb 120
6
mar 123
7
apr 150
8