Разбить набор данных на отдельные файлы Excel на основе определенного значения строки в данном столбце в Pandas? - PullRequest
0 голосов
/ 03 июня 2019

У меня довольно большой набор данных, который я хотел бы разделить на отдельные файлы Excel на основе имен в столбце A (столбец «Агент» в приведенном ниже примере). Я привел пример того, как этот набор данных выглядит в примере 1 ниже.

Используя pandas, каков наиболее эффективный способ создания нового файла Excel для каждого из имен в столбце A или столбца Agent в этом примере, предпочтительно с именем, найденным в столбце A, используемом в заголовке файла?

Например, в данном примере я хотел бы, чтобы отдельные файлы для Джона Доу, Джейн Доу и Стива Смита содержали информацию, которая следует за их именами (название компании, идентификатор предприятия и т. Д.).

Ex1

Agent        Business Name    Business ID    Revenue

John Doe     Bobs Ice Cream   12234          $400
John Doe     Car Repair       445848         $2331
John Doe     Corner Store     243123         $213
John Doe     Cool Taco Stand  2141244        $8912
Jane Doe     Fresh Ice Cream  9271499        $2143
Jane Doe     Breezy Air       0123801        $3412
Steve Smith  Big Golf Range   12938192       $9912
Steve Smith  Iron Gyms        1231233        $4133
Steve Smith  Tims Tires       82489233       $781

Я считаю, что Python / pandas были бы эффективным инструментом для этого, но я все еще довольно новичок в пандах, поэтому у меня возникают проблемы с началом работы.

Ответы [ 4 ]

0 голосов
/ 03 июня 2019

Группировка - это то, что вы ищете здесь.Вы можете перебирать группы, что дает вам атрибуты группировки и данные, связанные с этой группой.В вашем случае имя агента и связанные бизнес-столбцы.

Код:

import pandas as pd
# make up some data
ex1 = pd.DataFrame([['A',1],['A',2],['B',3],['B',4]], columns = ['letter','number'])

# iterate over the grouped data and export the data frames to excel workbooks
for group_name,data in ex1.groupby('letter'):
    # you probably have more complicated naming logic
    # use index = False if you have not set an index on the dataframe to avoid an extra column of indices
    data.to_excel(group_name + '.xlsx', index = False)
0 голосов
/ 03 июня 2019

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

s = df.groupby('Agent')

for name, group in s:
    group.to_excel(f"{name}.xls")
0 голосов
/ 03 июня 2019

Используйте уникальные значения в столбце для подмножества данных и записи их в csv, используя имя:

import pandas as pd
for unique_val in df['Agent'].unique():
    df[df['Agent'] == unique_val].to_csv(f"{unique_val}.csv")

если вам нужно Excel:

import pandas as pd
for unique_val in df['Agent'].unique():
    df[df['Agent'] == unique_val].to_excel(f"{unique_val}.xlsx")
0 голосов
/ 03 июня 2019

Использовать понимание текста с помощью groupby в столбце agent:

dfs = [d for _,d in df.groupby('Agent')]

for df in dfs:
    print(df, '\n')

выход

      Agent    Business Name  Business ID Revenue
4  Jane Doe  Fresh Ice Cream      9271499   $2143
5  Jane Doe       Breezy Air       123801   $3412 

      Agent    Business Name  Business ID Revenue
0  John Doe   Bobs Ice Cream        12234    $400
1  John Doe       Car Repair       445848   $2331
2  John Doe     Corner Store       243123    $213
3  John Doe  Cool Taco Stand      2141244   $8912 

         Agent   Business Name  Business ID Revenue
6  Steve Smith  Big Golf Range     12938192   $9912
7  Steve Smith       Iron Gyms      1231233   $4133
8  Steve Smith      Tims Tires     82489233    $781 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...