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

有表:


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_action

0   2016-01-01     1    King    1000

1   2016-01-02     1    King    -200

2   2016-01-03     1    King    100

3   2016-01-04     1    King    -400

4   2016-01-05     1    King    200

5   2016-01-06     1    King    -200

6   2016-01-01     2    Smith   1000

7   2016-01-02     2    Smith   -300

8   2016-01-03     2    Smith   -600

9   2016-01-04     2    Smith   100

10  2016-01-05     2    Smith   -100

需要获取表:


a_date      c_id    c_name  c_amount    Balance

2016-01-01     1    King    1000        1000

2016-01-02     1    King    -200        800

2016-01-03     1    King    100         900

2016-01-04     1    King    -400        500

2016-01-05     1    King    200         700

2016-01-06     1    King    -200        500

2016-01-01     2    Smith   1000        1000

2016-01-02     2    Smith   -300        700

2016-01-03     2    Smith   -600        100

2016-01-04     2    Smith   100         200

2016-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个客户的动态解决方案......


精慕HU
浏览 139回答 1
1回答

动漫人物

正如@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  balance0   2016-01-01     1   King      1000     10001   2016-01-02     1   King      -200      8002   2016-01-03     1   King       100      9003   2016-01-04     1   King      -400      5004   2016-01-05     1   King       200      7005   2016-01-06     1   King      -200      5006   2016-01-01     2  Smith      1000     10007   2016-01-02     2  Smith      -300      7008   2016-01-03     2  Smith      -600      1009   2016-01-04     2  Smith       100      20010  2016-01-05     2  Smith      -100      100
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python