我希望有人能帮我处理这个用例:
我想生成两个日期之间的日期,然后用周号标记每个日期,然后将新生成的日期和周号作为新列添加到原始数据帧中,并将其映射到用户id。
这是现有的数据帧:
user_id | start_dt | end_dt |
---|---|---|
1 | 2022-02-01 | <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