Pandas 将滚动功能与 Group By 相结合

2024-03-24

df=pd.DataFrame({'cust_id': [1,1,1,1,1,1,2,2,2,2,2,2],
                 'period' : [1,2,3,4,5,6,1,2,3,4,5,6],
                 'volume' : [1,2,3,4,5,6,7,8,9,10,11,12]})

我有一个客户表,其中包含每个客户的期间数据。我想计算 2 种不同窗口大小(3 和 6)的每个客户的滚动特征。

输出将是:

out=pd.DataFrame({'cust_id': [1,1,1,1,1,1,2,2,2,2,2,2],
                  'max_vol_3' : [None, None, 3,4,5,6,None,None,9,10,11,12],
                  'max_vol_6' : [None,None,None,None,None,6,None,None,None,None,None,12]})

我猜这是旋转,但代码让我困惑


您必须独立计算不同的窗口:

windows = [3, 6]

r = df.groupby('cust_id')['volume'].rolling
out = df.join(pd.concat({f'max_vol_{x}': r(x).max().droplevel(0)
                         for x in windows}, axis=1))

Output:

    cust_id  period  volume  max_vol_3  max_vol_6
0         1       1       1        NaN        NaN
1         1       2       2        NaN        NaN
2         1       3       3        3.0        NaN
3         1       4       4        4.0        NaN
4         1       5       5        5.0        NaN
5         1       6       6        6.0        6.0
6         2       1       7        NaN        NaN
7         2       2       8        NaN        NaN
8         2       3       9        9.0        NaN
9         2       4      10       10.0        NaN
10        2       5      11       11.0        NaN
11        2       6      12       12.0       12.0

使用多个聚合函数

windows = [3, 6]
functions = ['min', 'max']

r = df.groupby('cust_id')['volume'].rolling
out = df.join(pd.concat({f'{f}_vol_{x}': r(x).agg(f).droplevel(0)
                         for f in functions for x in windows}, axis=1))

Output:

    cust_id  period  volume  min_vol_3  min_vol_6  max_vol_3  max_vol_6
0         1       1       1        NaN        NaN        NaN        NaN
1         1       2       2        NaN        NaN        NaN        NaN
2         1       3       3        1.0        NaN        3.0        NaN
3         1       4       4        2.0        NaN        4.0        NaN
4         1       5       5        3.0        NaN        5.0        NaN
5         1       6       6        4.0        1.0        6.0        6.0
6         2       1       7        NaN        NaN        NaN        NaN
7         2       2       8        NaN        NaN        NaN        NaN
8         2       3       9        7.0        NaN        9.0        NaN
9         2       4      10        8.0        NaN       10.0        NaN
10        2       5      11        9.0        NaN       11.0        NaN
11        2       6      12       10.0        7.0       12.0       12.0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas 将滚动功能与 Group By 相结合 的相关文章

随机推荐