#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. Идеально! Огромное спасибо 🙂