擅长:python、mysql、java
<p>使用<code>groupby</code>+<code>cumsum</code>:</p>
<pre><code>df['NewCol'] = df.groupby('colA')['colB'].cumsum()
</code></pre>
<hr/>
<p>对于字符串求和,可以使用带有<code>groupby</code>的列表理解:</p>
<pre><code>df = df.sort_values('colA')
df['C'] = [''.join(g.iloc[:i+1].values) \
for _, g in df.groupby('colA')['colB'] \
for i in range(len(g.index))]
print(df)
colA colB C
0 1 val1 val1
1 1 val2 val1val2
2 1 val3 val1val2val3
3 2 val4 val4
4 2 val5 val4val5
5 2 val6 val4val5val6
6 3 val7 val7
7 3 val8 val7val8
8 3 val9 val7val8val9
</code></pre>
<p><strong>解释</strong></p>
<ul>
<li>首先通过<code>for _, g in df.groupby(...)[...]</code>迭代<code>groupby</code>元素。这里我们忽略索引<code>_</code>,因为我们只对值感兴趣。你知道吗</li>
<li>然后迭代<code>range(len(g.index))</code>,即迭代组中的项目数。你知道吗</li>
<li>对第一个<code>i</code>值应用<code>''.join</code>。我们使用<code>g.iloc[:i+1]</code>来提取组中的第一个<code>i</code>值。你知道吗</li>
<li>在嵌套列表中包装以上所有内容。你知道吗</li>
</ul>