我有一个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