我有一個CSV文件中的數據集。下面是一個示例:如何在Python中彙總CSV文件中的列值
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
是與ID的狀態符號,以便每個狀態可以具有與每companyid
不同的ID的多個行。我想要做的是,對於每個companyid
我想爲特定的time
特定狀態添加所有amount
。例如在上面的示例中,companyid
1有兩個time
2012Q1
的記錄 - 一個用於AK_995
,另一個用於AK_996
。我想在這兩項中添加金額,並且只需要AK作爲location
,即可獲得一個值爲2012Q1,AK,1,13484260.129
的記錄。這應該爲每個company
每time
期間爲所有州完成。請注意,不應該如time
那樣添加,如上面的樣本companyid
3
有2個記錄爲相同的狀態,但在不同的time
期間。此外,我只想在Metrics
爲Sales
的情況下執行此操作,因此我想刪除Metrics
不是Sales
的任何行,也不要在聚合中添加這些數量。
我也想寫輸出到另一個csv文件。我怎樣才能做到這一點?
更新部分:
按照建議的@MichaelLaszlo我有這樣的代碼。代碼似乎有一個問題。我想在輸出文件中將特定的companyid
的所有記錄放在一起。 companyid
內的記錄順序應該是按照明智的time
遞增的順序(針對特定位置的記錄聚集在一起用於特定的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