如何生成两个日期之间的日期将其转换为周nbr,将其添加到现有的数据帧中,并将其映射到用户id



我希望有人能帮我处理这个用例:

我想生成两个日期之间的日期,然后用周号标记每个日期,然后将新生成的日期和周号作为新列添加到原始数据帧中,并将其映射到用户id。

这是现有的数据帧:

<2022-02-01>
user_id start_dt end_dt
1 2022-02-01
2022-03-142022-01-05
4 2022-01-25 2022-02-25

我相信这应该会给你带来你想要的东西:

(df.assign(
date = [pd.date_range(s,e) for s,e in zip(df['start_dt'],df['end_dt'])])
.explode('date')
.assign(week_nbr = lambda x: np.char.add('w',((np.arange(len(x))//7)+1).astype(str))))

老答案:

(df.assign(
date = [pd.date_range(i,j) for i,j in zip(df['start_dt'],df['end_dt'])]).explode('date')
.assign(week_nbr = lambda x: x.groupby('user_id')['date']
.diff()
.dt.days
.cumsum()
.floordiv(7)
.add(1,fill_value=0)
.astype(int)
.map('w{}'.format))
.reset_index(drop=True))

输出:(前5行(

user_id   start_dt     end_dt       date week_nbr
0          1 2022-01-01 2022-02-01 2022-01-01       w1
1          1 2022-01-01 2022-02-01 2022-01-02       w1
2          1 2022-01-01 2022-02-01 2022-01-03       w1
3          1 2022-01-01 2022-02-01 2022-01-04       w1
4          1 2022-01-01 2022-02-01 2022-01-05       w1

最新更新