1

I have a list like this:

network = ['facebook','organic',instagram']

And I create 3 dataframes: facebook_count, organic_count, instagram_count that each type of network.

facebook_count = df[df.isin(['facebook installs'])]
organic_count = df[df.isin(['organic installs'])]
instagram_count = df[df.isin(['instagram installs'])]

so is there a way that write a iteration that create these 3 dataframes at once? I write something like this:

for i in range(len(network)+1):
    network[i]+'_count' = df[df.isin([network[i]+' installs'])]

But it returns a SyntaxError: can't assign to operator

qwer1234
  • 257
  • 4
  • 9

2 Answers2

4

The most efficient solution would be to create a dictionary storing the dataframes:

d = {i + '_count': df[df.isin([i + ' installs'])] for i in network}

And to get a dataframe, do:

print(d['facebook_count'])

Output will be the facebook_count dataframe with expected values

U13-Forward
  • 69,221
  • 14
  • 89
  • 114
  • I posted right after you. Your answer is indeed more elegant and I learned new thing that you may use something like a list comprehension in setting up dictionary. Thank you. – lrh09 May 20 '19 at 15:52
1

An easy fix is to use dictionary

count = {}    # creating a new dictionary
for i in range(len(network)+1):
    count[network[i]+'_count'] = df[df.isin([network[i]+' installs'])]

This way, you are using the name facebook_count,organic_count and instagram_count as keys of the dictionary

i.e. count['facebook_count'] = df[df.isin('facebook installs'])]

lrh09
  • 557
  • 4
  • 13