如何在pandas约会后8天内得到1,否则得到0?

Arm*_*_91 4 python dataframe pandas

我有两个数据框:


daily = pd.DataFrame({'Date': pd.date_range(start="2021-01-01",end="2021-04-29")})
pc21 = pd.DataFrame({'Date': ["2021-01-21", "2021-03-11", "2021-04-22"]})
pc21['Date'] = pd.to_datetime(pc21['Date'])

Run Code Online (Sandbox Code Playgroud)

我想要做的是:对于 in 中的每个日期,如果 in中的pc21日期在中,我想在新列中获得该日期后 8 天的值等于 1,否则为 0。pc21daily

这是所需输出的示例:

# 2021-01-21 is in either daframes so I want a new column in 'daily' that looks like this:

Date           newcol
.
.
.
2021-01-20       0
2021-01-21       1
2021-01-22       1 
2021-01-23       1
2021-01-24       1
2021-01-25       1
2021-01-26       1
2021-01-27       1
2021-01-28       1
2021-01-29       0
.
.
.
Run Code Online (Sandbox Code Playgroud)

谁能帮助我实现这个目标?

谢谢!

Max*_*axU 5

您可以尝试以下方法:

res = (daily
       .merge(pd.concat([pd.date_range(d, freq="D", periods=8).to_frame(name="Date")
                         for d in pc21["Date"]]), 
                        how="left", indicator=True)
       .replace({"both": 1, "left_only":0})
       .rename(columns={"_merge":"newcol"}))
Run Code Online (Sandbox Code Playgroud)

结果

In [15]: res
Out[15]:
          Date  newcol
0   2021-01-01       0
1   2021-01-02       0
2   2021-01-03       0
3   2021-01-04       0
4   2021-01-05       0
..         ...     ...
114 2021-04-25       1
115 2021-04-26       1
116 2021-04-27       1
117 2021-04-28       1
118 2021-04-29       1

[119 rows x 2 columns]
Run Code Online (Sandbox Code Playgroud)