<p>构建2个DatetimeIndex:一个来自原始数据帧的第一个和最后一个日期(完整索引),另一个来自现有的<code>Date</code>/<code>Time</code>列(稀疏索引)。最后,您可以合并两个数据帧并保留来自<code>calories</code>和<code>duration</code>列的数据</p>
<pre><code># full index from first and last dates
dti = pd.date_range(df["Date"].min(),
df["Date"].max() + pd.DateOffset(hours=12),
freq="12H")
# new dataframe with the full index
df1 = pd.DataFrame({"Date": dti.date,
"Time": dti.map(lambda dt: "Afternoon" if dt.hour == 12 else "Morning")},
index=dti)
# set index from existing Date / Time columns
df2 = df.set_index(pd.to_datetime(df["Date"].astype(str) + " " + df["Time"]
.replace({"Morning": "00:00:00", "Afternoon": "12:00:00"})))
# merge dataframes and keep data
out = df1.join(df2[["calories", "duration"]]).reset_index(drop=True)
</code></pre>
<pre><code>>>> out
Date Time calories duration
0 2021-05-22 Morning 420.0 50.0
1 2021-05-22 Afternoon 380.0 40.0
2 2021-05-23 Morning NaN NaN
3 2021-05-23 Afternoon NaN NaN
4 2021-05-24 Morning 390.0 45.0
5 2021-05-24 Afternoon 400.0 50.0
6 2021-05-25 Morning NaN NaN
7 2021-05-25 Afternoon NaN NaN
8 2021-05-26 Morning 350.0 45.0
9 2021-05-26 Afternoon 280.0 50.0
10 2021-05-27 Morning 300.0 44.0
11 2021-05-27 Afternoon 430.0 58.0
</code></pre>