Подведение итогов по случайному количеству входов столбца

Мне нужно суммировать количество столбцов "значение" для каждого значения col1 файла1 и экспортировать его в выходной файл. Я новичок в 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    

Заранее спасибо.

PS: я не могу использовать библиотеку панд из-за проблем с разрешениями. Я попробовал следующий код. Поделиться с трассировкой спины:

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]))

Проследить:

Traceback (последний вызов был последним): файл "C:\Users....\sum.py", строка 14, в amount = int(f[3]) IndexError: список индексов вне диапазона

2 ответа

Использование read_csv для создания DataFrame, затем groupby по индексу по level=0 и совокупность sum, Последний экспорт to_csv:

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

Ты можешь использовать 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)
Другие вопросы по тегам