Cha*_*rsi 3 python date python-3.x pandas
我有一个 df like,它有这样的行:
p_id m_id x_id g_id u_id
0 2 NaN 1408 7 121
1 3 1259 117 23 315
2 3 1259 221 9 718
3 3 1259 397 76 367
Run Code Online (Sandbox Code Playgroud)
和两个日期时间对象:
开始日期:
datetime.datetime(2021, 5, 25, 0, 0)
Run Code Online (Sandbox Code Playgroud)
结束日期:
datetime.datetime(2021, 5, 29, 0, 0)
Run Code Online (Sandbox Code Playgroud)
我如何得到一个 df ,基本上(添加从 start_date 到 end_date 的每一行的周日期):
p_id m_id x_id g_id u_id s_date
0 2 NaN 1408 7 121 2021-05-25
1 2 NaN 1408 7 121 2021-05-26
2 2 NaN 1408 7 121 2021-05-27
3 2 NaN 1408 7 121 2021-05-28
4 2 NaN 1408 7 121 2021-05-29
5 3 1259 117 23 315 2021-05-25
6 3 1259 117 23 315 2021-05-26
7 3 1259 117 23 315 2021-05-27
8 3 1259 117 23 315 2021-05-28
9 3 1259 117 23 315 2021-05-29
.
.
15 3 1259 397 76 367 2021-05-25
16 3 1259 397 76 367 2021-05-26
17 3 1259 397 76 367 2021-05-27
18 3 1259 397 76 367 2021-05-28
19 3 1259 397 76 367 2021-05-29
Run Code Online (Sandbox Code Playgroud)
date_range和交叉merge1.2x,为了执行交叉合并,我们现在可以将一个可选参数传递how='cross'给合并函数dates = pd.date_range(start_date, end_date)
df.merge(dates.to_series(name='s_date'), how='cross')
Run Code Online (Sandbox Code Playgroud)
1.2x我们必须创建一个临时合并键来执行cross合并dates = pd.date_range(start_date, end_date)
df.assign(k=1).merge(dates.to_frame(name='s_date').assign(k=1), on='k').drop('k', 1)
Run Code Online (Sandbox Code Playgroud)
p_id m_id x_id g_id u_id s_date
0 2 NaN 1408 7 121 2021-05-25
1 2 NaN 1408 7 121 2021-05-26
2 2 NaN 1408 7 121 2021-05-27
3 2 NaN 1408 7 121 2021-05-28
4 2 NaN 1408 7 121 2021-05-29
5 3 1259.0 117 23 315 2021-05-25
6 3 1259.0 117 23 315 2021-05-26
7 3 1259.0 117 23 315 2021-05-27
8 3 1259.0 117 23 315 2021-05-28
9 3 1259.0 117 23 315 2021-05-29
10 3 1259.0 221 9 718 2021-05-25
11 3 1259.0 221 9 718 2021-05-26
12 3 1259.0 221 9 718 2021-05-27
13 3 1259.0 221 9 718 2021-05-28
14 3 1259.0 221 9 718 2021-05-29
15 3 1259.0 397 76 367 2021-05-25
16 3 1259.0 397 76 367 2021-05-26
17 3 1259.0 397 76 367 2021-05-27
18 3 1259.0 397 76 367 2021-05-28
19 3 1259.0 397 76 367 2021-05-29
Run Code Online (Sandbox Code Playgroud)