偏移groupby相差一排

克雷斯托曼奇

我有一个看起来像这样的数据框:

first   client   last_visit   theme_type   days_borrowed
----------------------------------------------------------
Y       A        4/23/2019    Candy        0
N       A        5/5/2019     Jewel        12               
N       A        5/8/2019     Chocolate    3         
N       A        6/2/2019     Candy        25
N       A        6/12/2019    Rock         10
Y       B        3/5/2019     Chocolate    0
N       B        3/5/2019     Rock         0
Y       C        2/6/2019     Rock         0
Y       D        1/30/2019    Jewel        0
N       D        2/4/2019     Rock         5
N       D        2/8/2019     Candy        4

days_borrowed列的计算公式为:

df['days_borrowed'] = df.groupby('client')['last_visit'].diff().dt.days.fillna(0)

但是,如果需要这样做的话,我需要它实际上求差,因为借来的#天实际上是针对先前主题而不是当前主题。最后一次主题选择应计算为last_visit与静态日期(例如7/31/2019)之差。

因此,所需的输出如下所示:

first   client   last_visit   theme_type   days_borrowed
----------------------------------------------------------
Y       A        4/23/2019    Candy        12
N       A        5/5/2019     Jewel        3              
N       A        5/8/2019     Chocolate    25         
N       A        6/2/2019     Candy        10
N       A        6/12/2019    Rock         49
Y       B        3/5/2019     Chocolate    0
N       B        3/5/2019     Rock         148
Y       C        2/6/2019     Rock         175
Y       D        1/30/2019    Jewel        5
N       D        2/4/2019     Rock         4
N       D        2/8/2019     Candy        173

其中49、148、175和173是通过计算与last_visit和固定日期7/31/2019之差得出的。

所以我想知道是否有可能:

1)将差值计算偏移1,

2)对于每个客户的最后一次出现,是否要使用last_visit和固定日期(7/31/2019)之间的差额?

任何帮助将不胜感激!谢谢!

洛兹
  1. 使用-1periods的参数diff再取绝对值。
  2. fillna 与您所需的计算。

码:

import pandas as pd
#df['last_visit'] = pd.to_datetime(df.last_visit)

df['days_borrowed'] = (df.groupby('client')['last_visit']
                         .diff(-1).dt.days.abs()
                         .fillna((pd.to_datetime('2019-07-31')-df['last_visit']).dt.days))

输出: df

   first client last_visit theme_type  days_borrowed
0      Y      A 2019-04-23      Candy           12.0
1      N      A 2019-05-05      Jewel            3.0
2      N      A 2019-05-08  Chocolate           25.0
3      N      A 2019-06-02      Candy           10.0
4      N      A 2019-06-12       Rock           49.0
5      Y      B 2019-03-05  Chocolate            0.0
6      N      B 2019-03-05       Rock          148.0
7      Y      C 2019-02-06       Rock          175.0
8      Y      D 2019-01-30      Jewel            5.0
9      N      D 2019-02-04       Rock            4.0
10     N      D 2019-02-08      Candy          173.0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章