回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我想创建一个图表,显示一段时间内每个“入职年”(第一笔客户交易)的累计平均收入。但是我在对我需要的信息进行分组时犯了错误</p>
<p><strong>玩具数据:</strong></p>
<pre><code>dataset = {'ClientId': [1,2,3,1,2,3,1,2,3,1,2,3,4,4,4,4,4,4,4],
'Year Onboarded': [2018,2019,2020,2018,2019,2020,2018,2019,2020,2018,2019,2020,2016,2016,2016,2016,2016,2016,2016],
'Year': [2019,2019,2020,2019,2019,2020,2018,2020,2020,2020,2019,2020,2016,2017,2018,2019,2020,2017,2018],
'Revenue': [100,50,25,30,40,50,60,100,20,40,100,20,5,5,8,4,10,20,8]}
df = pd.DataFrame(data=dataset)
</code></pre>
<p>说明:客户有一个指定的“入职年份”,他们每年都会进行一次交易。
然后,我计算了自客户加入以来经过的时间,以使我的图表在视觉上更具吸引力</p>
<pre><code>df['Yearsdiff'] = df['Year']-df['Year Onboarded']
</code></pre>
<p>为了计算累计平均收入,我尝试了以下方法:</p>
<ul>
<li>第一次尝试:</li>
</ul>
<pre><code>df = df.join(df.groupby(['Year']).expanding().agg({ 'Revenue': 'mean'})
.reset_index(level=0, drop=True)
.add_suffix('_roll'))
df.groupby(['Year Onboarded', 'Year']).last().drop(columns=['Revenue'])
</code></pre>
<p>输出开始累积,但最后一行不再累积(不确定原因)</p>
<ul>
<li>第二次尝试:</li>
</ul>
<pre><code>df.groupby(['Year Onboarded','Year']).agg('mean') \
.groupby(level=[1]) \
.agg({'Revenue':np.cumsum})
</code></pre>
<p>但它不能正常工作,我也尝试了其他方法,但没有取得好的效果</p>
<p>要可视化累计平均收入,我只需使用<code>sns.lineplot</code></p>
<p>我的目标是得到一个类似于下图的图表,但为此,我首先需要正确地分组数据</p>
<p><strong>预期输出图</strong></p>
<p><a href="https://i.stack.imgur.com/9lijq.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/9lijq.png" alt="enter image description here"/></a></p>
<p>我们在图表上看到的年份代表的是“入职年份”,而不是“入职年份”</p>
<p>有人能帮我计算一个累积平均收入,以便绘制一个类似于上面的图表吗?多谢各位</p>
<p>此外,玩具数据集中提供的数据肯定不会给出与示例图类似的东西,但想法应该存在</p>