为了账号安全,请及时绑定邮箱和手机立即绑定

Python Pandas中的分析滑动窗口函数

Python Pandas中的分析滑动窗口函数

精慕HU 2022-08-16 10:42:22
有表:list_1= [['2016-01-01',1,'King', 1000],            ['2016-01-02',1,'King', -200],            ['2016-01-03',1,'King', 100],            ['2016-01-04',1,'King',-400],            ['2016-01-05',1,'King', 200],            ['2016-01-06',1,'King',  -200],            ['2016-01-01',2,'Smith',  1000],            ['2016-01-02',2,'Smith',  -300],            ['2016-01-03',2,'Smith',  -600],            ['2016-01-04',2,'Smith',  100],            ['2016-01-05',2,'Smith',  -100]]labels=['a_date','c_id','c_name','c_action']df=pd.DataFrame(list_1,columns=labels)df外:    a_date       c_id   c_name  c_action0   2016-01-01     1    King    10001   2016-01-02     1    King    -2002   2016-01-03     1    King    1003   2016-01-04     1    King    -4004   2016-01-05     1    King    2005   2016-01-06     1    King    -2006   2016-01-01     2    Smith   10007   2016-01-02     2    Smith   -3008   2016-01-03     2    Smith   -6009   2016-01-04     2    Smith   10010  2016-01-05     2    Smith   -100需要获取表:a_date      c_id    c_name  c_amount    Balance2016-01-01     1    King    1000        10002016-01-02     1    King    -200        8002016-01-03     1    King    100         9002016-01-04     1    King    -400        5002016-01-05     1    King    200         7002016-01-06     1    King    -200        5002016-01-01     2    Smith   1000        10002016-01-02     2    Smith   -300        7002016-01-03     2    Smith   -600        1002016-01-04     2    Smith   100         2002016-01-05     2    Smith   -100        100所以我需要为每个客户在每个操作后使用累积金额制作“余额”列。这相当于 SQL 查询:SELECT *,        SUM(c_amount) OVER (PARTITION BY c_id ORDER BY a_date) AS 'Balance'FROM account_actions对于两个客户来说,解决方案并不难,可以按c_id划分表,总结和整合回来。但它应该是10000个客户的动态解决方案......
查看完整描述

1 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

正如@Vaishali所评论的那样,这是 和 。您可能希望确保数据按顺序排序,尽管它看起来已经如此:groupbycumsumsort_values


# sort by `c_id` and `a_date`

df = df.sort_values(['c_id','a_date'])


df['balance'] = df.groupby('c_id')['c_action'].cumsum()

输出:


        a_date  c_id c_name  c_action  balance

0   2016-01-01     1   King      1000     1000

1   2016-01-02     1   King      -200      800

2   2016-01-03     1   King       100      900

3   2016-01-04     1   King      -400      500

4   2016-01-05     1   King       200      700

5   2016-01-06     1   King      -200      500

6   2016-01-01     2  Smith      1000     1000

7   2016-01-02     2  Smith      -300      700

8   2016-01-03     2  Smith      -600      100

9   2016-01-04     2  Smith       100      200

10  2016-01-05     2  Smith      -100      100


查看完整回答
反对 回复 2022-08-16
  • 1 回答
  • 0 关注
  • 138 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号