<p>根据更新的问题,您只需执行以下操作:</p>
<pre><code># assign a new temp_factor with initial values and prep for cumprod
stpassrev['temp_factor'] = np.where(stpassrev['factor'].isna(), 1, stpassrev['factor'].add(100).div(100))
# calculate the cumprod based on the temp_factor (grouped by Sector) and multiply by 100 for index_value
stpassrev['index_value'] = stpassrev.groupby('Sector')['temp_factor'].cumprod().mul(100)
</code></pre>
<p>结果:</p>
<pre><code> ticket_cat Sector Year factor temp_factor index_value
0 Revenue LSE Jan 2004 NaN 1.000000 100.000000
1 Revenue LSE Jan 2005 4.323543 1.043235 104.323543
2 Revenue LSE Jan 2006 3.096308 1.030963 107.553721
3 Revenue LSE Jan 2007 6.211666 1.062117 114.234599
4 Revenue LD Jan 2004 NaN 1.000000 100.000000
5 Revenue LD Jan 2005 3.521800 1.035218 103.521800
6 Revenue LD Jan 2006 2.741700 1.027417 106.360057
7 Revenue LD Jan 2007 3.350600 1.033506 109.923757
</code></pre>
<p>如果需要四舍五入到4位精度,请在<code>.mul(100)</code>之后添加<code>.round(4)</code>:</p>
<pre><code>stpassrev['index_value'] = stpassrev.groupby('Sector')['temp_factor'].cumprod().mul(100).round(4)
ticket_cat Sector Year factor temp_factor index_value
0 Revenue LSE Jan 2004 NaN 1.000000 100.0000
1 Revenue LSE Jan 2005 4.323543 1.043235 104.3235
2 Revenue LSE Jan 2006 3.096308 1.030963 107.5537
3 Revenue LSE Jan 2007 6.211666 1.062117 114.2346
4 Revenue LD Jan 2004 NaN 1.000000 100.0000
5 Revenue LD Jan 2005 3.521800 1.035218 103.5218
6 Revenue LD Jan 2006 2.741700 1.027417 106.3601
7 Revenue LD Jan 2007 3.350600 1.033506 109.9238
</code></pre>