У меня есть набор данных в CSV-файле. Вот пример:Как суммировать значения столбцов из файла CSV в Python
Time,Location,Companyid,Metrics,Amount
2012Q1,AK_995,A,Sales,8820156.363
2012Q1,AK_995,B,Revenue,28392730.51
2012Q1,AK_995,C,Sales,6980332.166
2012Q1,AK_996,B,Revenue,1894254.13
2012Q1,AK_996,A,Sales,4664103.766
2012Q2,AK_995,C,Sales,7980332.166
Здесь time
в год и квартал, location
это состояние символ с идентификатором, чтобы каждое состояние может иметь несколько строк с различными идентификаторами в companyid
. Что я хочу сделать, так это то, что для каждого companyid
я хочу добавить все amount
для конкретного штата по конкретному time
. Например, в приведенном выше образце companyid
1 имеет две записи для time
2012Q1
- один для AK_995
и один для AK_996
. Я хочу добавить сумму в эти два и просто AK как location
, чтобы получить одну запись со значениями 2012Q1,AK,1,13484260.129
. Это должно быть сделано для каждого company
за time
период для всех состояний. Обратите внимание, что amounts
через time
не следует добавлять, как в приведенном выше образце. companyid
3
был 2 записей для этого штата, но в другом time
период. Также я хочу сделать это только там, где Metrics
- Sales
, поэтому я хочу удалить любую строку, где Metrics
отличен от Sales
, и не добавляйте эту сумму в агрегирование.
Я также хочу записать вывод в другой файл csv. Как я могу это сделать?
UPDATE РАЗДЕЛ:
По предложению @MichaelLaszlo У меня есть этот код. Кажется, что у кода есть одна проблема. В выходном файле я хочу, чтобы все записи для конкретного companyid
собрались вместе. Порядок записей в пределах companyid
должен быть в порядке возрастания time
за location
мудрый (записи для определенного места объединяются для конкретного companyid
). Так, например, если есть companyid
B
тогда все записи companyid
B
должны быть вместе, и там порядок должен быть, как показано ниже:
companyid,state,time,amount
B,AK,2010Q1,5000
B,AK,2010Q2,5100
B,AK,2010Q3,4300
B,AK,2010Q4,4350
B,AK,2011Q1,5600
Как вы можете видеть выше всех записей companyid
B
вместе и в companyid
B
Записи для конкретного location
находятся в очереди time
. В моем текущем выпуске я получаю записи для всех companyids
разбросанных. Мой текущий код:
totals = {}
# Aggregate sales by quarter, state, and company.
for row in csv.reader(open('data.csv')):
if row[3] == 'Sales':
key = (row[0], row[1][:2], row[2])
totals[key] = totals.setdefault(key, 0) + float(row[4])
# Write aggregated data to file.
with open('aggregated.csv', 'w') as out_file:
writer = csv.writer(out_file)
for key, value in totals.items():
row = list(key) + [value]
writer.writerow(row)
Мой выходной ток образца:
time,state,companyid,amount
2014Q4,AL_,B,547991592.5101689
2014Q1,NV_,B,387534045.40654004
2012Q3,SC_,A,333657617.05835015
2014Q4,DC_,C,54022786.60577
2014Q3,TN_,B,594121931.7221502
Как вы можете увидеть записи для companyid
B
разбросаны, и я хочу, выход в том порядке, который я упомянул выше в моем обновления.
Что именно ваша проблема? Чтение csv может быть выполнено, как описано в: https://docs.python.org/2/library/csv.html – haraldkl
@haraldkl. Моя проблема в том, что я не знаю, как выполнить агрегирование, описанное в моем сообщении выше. Я знаю, как читать файл csv, но его обработка беспокоит меня, поскольку я новичок в этом. – user2966197