Создайте несколько df из одного df

#python #pandas

Вопрос:

У меня есть df в качестве:

 Company Sales
A        100
A        200
A        300
B        50
B        60
C        10
C        20
 

Теперь я хочу создать отдельные df для каждой компании, чтобы один df содержал информацию только об одной компании, как показано ниже:

 Company   Sales
A        100
A        200
A        300
 

Аналогично, для B как —

 Company   Sales
B        50
B        60
 

Ответ №1:

Вы можете использовать groupby и преобразовывать в словарь:

 dfs = dict(list(df.groupby('Company')))
 

затем вы можете получить доступ к подкадрам данных по ключу:

 >>> dfs['A']
  Company  Sales
0       A    100
1       A    200
2       A    300
 

как что — то сделать с фреймами данных программно:

 for company, data in df.groupby('Company'):
    emailing_function(company, data)
 

или:

 companies = df['Company'].unique()
dfs = dict(list(df.groupby('Company')))

### other part of code
for company in companies:
    emailing_function(company, dfs[company])
 

Комментарии:

1. Спасибо, Мозвей… но у меня есть >1000 подобных записей, и я хочу создать dfs для каждой компании и отправить им соответствующие записи по почте в виде вложений. Я не могу вручную ввести dfs[‘A’] для каждой компании и извлечь dfs. Есть ли способ запустить цикл для извлечения всех отдельных файлов dfs по отдельности.

2. Я настоятельно не рекомендую вам делать это, особенно если вам нужно что-то сделать программно. Вам не нужно ничего вводить вручную, позвольте мне добавить обновление к ответу

3. Используйте цикл for или получите названия компаний с df.keys() помощью .

Ответ №2:

Мы можем использовать groupby в Панд и сохранять отдельные фреймы данных в Excel (или любом другом формате). Вот рабочий код.

 df_grp = df.groupby('Company')

for comp_nam, comp_grp in df_grp:
    file_name = comp_nam.upper() ".xlsx"
    comp_grp.to_excel(file_name, index=False)
 

Комментарии:

1. Идеально! Огромное спасибо 🙂