Добавить в функцию на python выгрузку таблиц в csv с наименованием
Написана функция:
def split_reg(df):
regions = df['region_id'].unique()
for reg in regions:
df_reg = df[df['region_id'] == reg]
display(df_reg)
принимает на вход датафрейм со столбцами 'contact_id', 'phone', 'region_id', 'name', на выходе выводит на экран несколько таблиц, разделенных по признаку 'region_id'.
что и как нужно добавить в эту функцию или изменить, чтобы она эти таблицы сохраняла каждую в отдельный csv-файл с именем каждого региона ('name')?
пробовала делать вложенный цикл, файлы сохраняются, но под каждым именем сохраняется только один последний регион((
def split_reg(df):
regions = df['region_id'].unique()
names = df['name'].unique()
for name in names:
for reg in regions:
df_reg = df[df['region_id'] == reg]
df_reg.to_csv(f'{name}.csv', index= False)
Ответы (2 шт):
Автор решения: Корчагин Сергей
→ Ссылка
def split_reg(df):
regions = df['region_id'].unique()
for reg in regions:
df_reg = df[df['region_id'] == reg]
region_name = df_reg['name'].iloc[0]
df_reg.to_csv(f'{region_name}.csv', index=False)
Автор решения: Алексей Р
→ Ссылка
Можно сгруппировать по имени и через apply()
вывести все группы в отдельные файлы
def split_reg(df):
df.groupby('name').apply(lambda x: x.to_csv(rf'c:\test\{x.name}.csv', index=False))
df = pd.DataFrame({'contact_id': [123, 456, 789] * 3, 'phone': [11111, 22222, 33333] * 3, 'region_id': [12, 13, 14] * 3, 'name': ['Первый', 'Второй', 'Третий'] * 3})
split_reg(df)
Образец вывода
contact_id,phone,region_id,name
789,33333,14,Третий
789,33333,14,Третий
789,33333,14,Третий