У меня есть такой список:

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

И я создаю 3 dataframes: facebook_count, organic_count, instagram_count, что каждый тип сети.

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

Так есть ли способ написать итерацию, которая создаст эти 3 кадра данных одновременно? Я пишу что-то вроде этого:

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

Но он возвращает SyntaxError: не может быть назначен оператору

1
qwer1234 20 Май 2019 в 12:15

2 ответа

Лучший ответ

Наиболее эффективным решением было бы создать словарь, хранящий кадры данных:

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

И чтобы получить фрейм данных, выполните:

print(d['facebook_count'])

Выводом будет фрейм данных facebook_count с ожидаемыми значениями

3
U10-Forward 20 Май 2019 в 10:25

Простое решение - использовать dictionary

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

Таким образом, вы используете имя facebook_count, organic_count и instagram_count в качестве ключей словаря

То есть count['facebook_count'] = df[df.isin('facebook installs'])]

1
lrh09 20 Май 2019 в 09:20