How can I get a running sum for a list?

One (not functional) possibility out of many:

dataacc = data;
dataacc[[All, 2]] = Accumulate[data[[All, 2]]]

This will keep the third elements. If you want those removed, you can start with dataacc = data[[All, 1 ;; 2]];

I didn't benchmark, but I expect this to be fast.


Here is an arguably functional-style version without in-place modifications:

FoldList[{First@#2, #2[[2]] + #1[[2]]} &, First@data, Rest@data]

It is likely to be slower than the solution proposed by Szabolcs.


Another one!

val = data[[All, 2]];
Transpose@{data[[All, 1]], Take[FoldList[Plus, 0, val], -Length@val]}