根据列

时间:2018-03-06 13:44:16

标签: python calculated-columns data-processing

我需要总结File1的col1的每个值的“value”列数量,并将其导出到输出文件。我是python的新手,需要为成千上万的记录做这件事。

File1中

col1 col2              value
559 1   91987224    2400000000
559 0   91987224    100000000
558 0   91987224    100000000
557 2   87978332    500000000
557 1   59966218    2400000000
557 0   64064811    100000000

期望的输出:

col1      Sum 
559     2500000000
558     1000000000
557     3000000000    

提前致谢。

P.S:由于权限问题,我无法使用pandas库。我尝试了以下代码。与追溯共享它:

import csv 
fin = open("File1.txt","r")
list_txid = {}
num_tx = {}
amount_tx = {}

for line in fin:
    line = line.rstrip()
    f = line.split("\t")
    txid = f[0]
    amount = int(f[3])

fin.close()
for txid in list_txid:
    num_tx[txid] += 1
    amount_tx[txid] += amount
    print("{0}\t{1:d}\t{2:d}".format(txid, amount_tx[txid]))

追溯:

追踪(最近一次通话):   文件“C:\ Users .... \ sum.py”,第14行,in     amount = int(f [3]) IndexError:列表索引超出范围

2 个答案:

答案 0 :(得分:1)

您可以使用pandas

df = pd.read_csv('in.csv', delim_whitespace=True)

#      col1      col2       value
# 559     1  91987224  2400000000
# 559     0  91987224   100000000
# 558     0  91987224   100000000
# 557     2  87978332   500000000
# 557     1  59966218  2400000000
# 557     0  64064811   100000000

result = df.groupby(df.index)['value'].sum().reset_index()

#    index       value
# 0    557  3000000000
# 1    558   100000000
# 2    559  2500000000

result.to_csv('out.csv', index=False)

答案 1 :(得分:1)

使用read_csv创建DataFrame,然后groupby使用level=0索引并汇总sum。上次导出to_csv

df = pd.read_csv(file1)
df.groupby(level=0)['value'].sum().to_file(file2)