Создайте новый фрейм данных для каждого уровня фактора в столбце

1

В столбце есть 50+ разных уровней, и каждый уровень должен быть разбит на его собственный фрейм данных и записан в файл (Excel или CSV).

Я видел это как возможное решение:

df1, df2, df3, df4 = [x for _, x in df.groupby(df['column_of_interest'])]

но есть ли способ не жестко кодировать количество кадров данных?

Теги:
pandas
pandas-groupby

3 ответа

2

Есть ли способ не жестко кодировать количество кадров данных?

Да, есть. Используйте словарь или список. Используя dict:

dfs = {i: x for i, (_, x) in enumerate(df.groupby('column_of_interest'), 1)}

Затем получите доступ к вашим фреймам данных через dfs[1], dfs[2] и т.д.

В качестве альтернативы, используя list:

dfs = [x for _, x in df.groupby('column_of_interest')]

Затем используйте dfs[0], dfs[1] и т.д.

Если вам не нужно хранить фрагменты данных, просто groupby объект groupby и используйте to_csv. Это удобно для f-строк (PEP 498, Python 3. 6+):

for idx, (value, x) in enumerate(df.groupby('column_of_interest'), 1):
    x.to_csv(f'slice_{value}.csv')  # include value in filename
    x.to_csv(f'slice_{idx}.csv')    # include numeric index in filename
0

Вы можете сохранить данные непосредственно

[df1.to_csv("coi_%s.csv"%val) for val, df1 in df.groupby(df['column_of_interest'])]

Или с явным для цикла

for val, df1 in df.groupby(df['column_of_interest']):
    #Write the df1 to csv or excel
    df1.to_csv("coi_%s.csv"%val)
  • 0
    Это сработало. Мне нужно было сохранить CSV по уровню столбца. Спасибо!
0

Один из способов сделать это с помощью locals но не рекомендовать, лично подумать, что jpp answer - это правильный путь для этого типа запроса.

variables = locals()
for key,value in df.groupby(df['column_of_interest']):
    variables["df{0}".format(key)]= value

Ещё вопросы

Сообщество Overcoder
Наверх
Меню