首页 > 解决方案 > Pandas Groupby Ratio怎么做?

问题描述

我有以下数据框。

          product   Dates   Times      Sale
level_1             
0        ACN    2020-12-23  09:15:00    25
1        ACN    2020-12-23  09:20:00    30
2        ACN    2020-12-24  09:15:00    50
3        ACN    2020-12-24  09:20:00    45
0        ACN2   2020-12-23  09:15:00    80
1        ACN2   2020-12-23  09:20:00    55
2        ACN2   2020-12-24  09:15:00    20
3        ACN2   2020-12-24  09:20:00    110

我想要所有产品在同一时间与前一天的产品销售比率。

ACN12 月 24 日 9 点 15 分对产品说

销售比率 = 50/25=2(这里 25 是前一天的同一时间)

我想要的是这个。

      product   Dates   Times      Sale  Sale_ratio
level_1             
0        ACN    2020-12-23  09:15:00    25     Nan
1        ACN    2020-12-23  09:20:00    30     Nan
2        ACN    2020-12-24  09:15:00    50      2
3        ACN    2020-12-24  09:20:00    45      1.5
0        ACN2   2020-12-23  09:15:00    80     Nan
1        ACN2   2020-12-23  09:20:00    55     Nan
2        ACN2   2020-12-24  09:15:00    20      0.25
3        ACN2   2020-12-24  09:20:00    110     2

标签: pythonpandas

解决方案


让我们试试 groupby,变换 row/rwo.shift()

df['Sale_ratio']=df.groupby(['product','Times'])['Sale'].transform(lambda x: x/(x.shift()))



         product   Dates     Times  Sale  Sale_ratio
level_1                                                
0           ACN  2020-12-23  09:15:00    25         NaN
1           ACN  2020-12-23  09:20:00    30         NaN
2           ACN  2020-12-24  09:15:00    50        2.00
3           ACN  2020-12-24  09:20:00    45        1.50
0          ACN2  2020-12-23  09:15:00    80         NaN
1          ACN2  2020-12-23  09:20:00    55         NaN
2          ACN2  2020-12-24  09:15:00    20        0.25
3          ACN2  2020-12-24  09:20:00   110        2.00

推荐阅读