2 回答
![?](http://img1.sycdn.imooc.com/5458655200013d9802200220-100-100.jpg)
TA贡献1772条经验 获得超8个赞
让我们试试.cumsum()axis=1。那就是cumsum(1)。
df=df.join(df[['revenue']].cumsum(1).rename(columns=dict(revenue='Cumsum')))
publisher month_leadgen revenue Cumsum \
month_payment 2019-01 2019-02 2019-03 2019-01 2019-02
0 facebook 2019-01 60.0 25.0 45.0 60.0 85.0
1 google 2019-02 NaN 85.0 90.0 NaN 85.0
2 google 2019-03 NaN NaN 60.0 NaN NaN
month_payment 2019-03
0 130.0
1 175.0
2 60.0
或者,在枢轴阶段进行;
df2 = df=df.pivot_table(index=['month_leadgen','publisher'], columns=['month_payment'], values=['revenue']).cumsum(axis=1).reset_index()
![?](http://img1.sycdn.imooc.com/54584ee0000179f302200220-100-100.jpg)
TA贡献1911条经验 获得超7个赞
只需以这种方式定义您的数据集,并将发布者作为索引:
df = pd.DataFrame( { 'month_leadgen': ['2019-01', '2019-01', '2019-01', '2019-02', '2019-02', '2019-03'], '月付款': ['2019-01', '2019-02', '2019-03', '2019-02', '2019-03', '2019-03'], '收入': [60, 25, 45, 85, 90, 60] }, 索引 = ['facebook', 'facebook', 'facebook', 'google', 'google', 'google'] )
然后执行执行这一行:
df['TotalShifted'] = df.groupby(level=0)['收入'].transform(lambda x: x.cumsum().shift(0))
您将获得:
Month_leadgen Month_ payment 收入 TotalShifted facebook 2019-01 2019-01 60 60 facebook 2019-01 2019-02 25 85 facebook 2019-01 2019-03 45 130 google 2019-02 2019-02 85 85 google 2019-02 201 9-03 90 175 谷歌2019年3月 2019年3月 60 235
添加回答
举报