Как я могу создать несколько новых фреймов данных внутри цикла for? - PullRequest
0 голосов
/ 01 октября 2018

Я хочу создать for_loop, который не перезаписывает выходящий фрейм данных?

for df in 2011, 2012, 2013:
       df = pd.pivot_table(df, index=["income"], columns=["area"], values=["id"], aggfunc='count')

Прямо сейчас цикл for выполняет итерации по каждому из существующих фреймов данных.Как сделать так, чтобы цикл for создавал кучу новых фреймов данных?

2011_pivot, 2012_pivot, 2013_pivot

Ответы [ 3 ]

0 голосов
/ 01 октября 2018

Я бы вообще отговаривал вас создавать множество переменных со связанными именами, что является опасным шаблоном проектирования в Python (хотя, например, в SAS это часто встречается).Лучшим вариантом было бы создать словарь фреймов данных с ключом в качестве вашего «имени переменной»

df_dict = dict()
for df in 2011, 2012, 2013:
   df_dict["pivot_"+df.name] = pd.pivot_table(df, index=["income"], columns=["area"], values=["id"], aggfunc='count')

Я предполагаю, что ваши фреймы данных имеют имена «2011», «2012», «2013»«

0 голосов
/ 01 октября 2018

Не создавайте переменные без необходимости.Вместо этого используйте dict или list, например, через словарь или список.

В качестве альтернативы рассмотрите MultiIndex столбцы и один pd.pivot_table вызов:

dfs = {2011: df_2011, 2012: df_2012, 2013: df_2013}
comb = pd.concat([v.assign(year=k) for k, v in dfs.items()], ignore_index=True)

df = pd.pivot_table(comb, index='income', columns=['year', 'area'],
                    values='id', aggfunc='count')

Затем вы можете использовать обычные методы индексации для фильтрации по определенному году, например,

pivot_2011 = df.iloc[:, df.columns.get_level_values(0).eq(2011)]
0 голосов
/ 01 октября 2018

Я не вижу другого пути, кроме как создать список или словарь фреймов данных, в противном случае вам нужно было бы назвать их вручную.

df_list = [pd.pivot_table(df, index=["income"], columns=["area"], values=["id"], aggfunc='count') for df in 2011, 2012, 2013]

Вы можете найти пример здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...