gpt4 book ai didi

python - 偏移 groupby 差异一行

转载 作者:太空宇宙 更新时间:2023-11-04 04:02:30 25 4
gpt4 key购买 nike

我有一个如下所示的数据框:

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. diffperiods 参数使用 -1然后取绝对值。
  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

关于python - 偏移 groupby 差异一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57964805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com