6

I have a dataframe like

month  dest
1       a
1       bb
2       cc 
2       dd
3       ee
4       bb

I need to create a set to 4 another dataframe. I am looping over and hope to assign name of dataframe dynamicall inside loop, like

i=1
while i<=4:

    dataframe+str(i)=org_dataframe.loc[org_dataframe['month'] == i]
    i=i+1

It gives me,

SyntaxError: can't assign to operator

how do I create a dynamic string variable/name of dataframe.

JJJ
  • 1,009
  • 6
  • 19
  • 31
abhinay_k
  • 61
  • 1
  • 2

2 Answers2

6

I think the best is create dict of objects - see How do I create a variable number of variables?

You can use dict of DataFrames by converting groupby object to dict:

d = dict(tuple(df.groupby('month')))
print (d)
{1:    month dest
0      1    a
1      1   bb, 2:    month dest
2      2   cc
3      2   dd, 3:    month dest
4      3   ee, 4:    month dest
5      4   bb}

print (d[1])
   month dest
0      1    a
1      1   bb

Another solution:

for i, x in df.groupby('month'):
    globals()['dataframe' + str(i)] = x

print (dataframe1)
   month dest
0      1    a
1      1   bb
jezrael
  • 822,522
  • 95
  • 1,334
  • 1,252
  • 1
    Looking to use this in something similar - but my month is a datetime 2020-03-01 and so on. Struggling to see what my created dataframe will be called as print (dataframe2020-03-01) give me an error. Thanks. But that suggestion below solves that....should've read on. – breaker7 Mar 16 '21 at 15:00
3

You can use a list of dataframes:

dataframe = []
dataframe.append(None)

group = org_dataframe.groupby('month')

for n,g in group:
    dataframe.append(g)

dataframe[1]

Output:

   month dest
0      1    a
1      1   bb

dataframe[2]

Output:

   month dest
2      2   cc
3      2   dd
Scott Boston
  • 147,308
  • 15
  • 139
  • 187