擅长:python、mysql、java
<p>我不熟悉您所使用的<code>pd</code>对象的标识,但是我理解您的问题的方式是您有一个标签列表(在代码中用<code>id</code>表示),它们对应于几个长度相等的列表(在代码中表示为<code>var1</code>,<code>var2</code>,和{<cd5>}),并且您希望对共享同一标签的项求和,请执行以下操作:这对于每个标签,并返回结果。在</p>
<p>以下代码解决了一般问题(假设标签数组已排序):</p>
<pre><code>def cumsum(A):
from operator import add
return reduce(add, A) # cumulative sum of array A
def cumsumlbl(A, lbl):
idx = [lbl.index(item) for item in set(lbl)] # begin index of each lbl subsequence
idx.append(len(lbl)) # last index doesn't get added in the above line
return [cumsum(A[i:j]) for (i,j) in zip(idx[:-1], idx[1:])]
</code></pre>
<p>或者使用出现在<a href="https://stackoverflow.com/a/323910/2821756">here</a>的<a href="https://stackoverflow.com/users/22364/markus-jarderot">Markus Jarderot</a>代码的修改版本:</p>
^{pr2}$
<p>测试:</p>
<pre><code>if __name__ == '__main__'
A = [1, 2, 3, 4, 5, 6]
lbl = [1, 1, 2, 2, 2, 3]
print cumsumlbl(A, lbl)
</code></pre>
<p>输出:</p>
<pre><code>[3, 12, 6]
</code></pre>