python - 根据其他 DataFrame 填充日期内的值
问题描述
我正在尝试填充这个 DataFrame (df1)(我可以用 NaN 或零值开始它):
27/05/2021 28/05/2021 29/05/2021 30/05/2021 31/05/2021 01/06/2021 02/06/2021 ...
Name1 Nan Nan Nan Nan Nan Nan Nan
Name2 Nan Nan Nan Nan Nan Nan Nan
Name3 Nan Nan Nan Nan Nan Nan Nan
Name4 Nan Nan Nan Nan Nan Nan Nan
在此 DataFrame (df2) 中记录信息:
Start1 End1 Dedication1 (h) Start2 End2 Dedication2 (h)
Name1 24/05/2021 31/05/2021 8 02/06/2021 10/07/2021 3
Name2 29/05/2021 31/05/2021 5 Nan Nan Nan
Name3 27/05/2021 01/06/2021 3 Nan Nan Nan
Name4 29/05/2021 07/08/2021 8 10/10/2021 10/12/2021 2
要得到这样的东西(df3):
27/05/2021 28/05/2021 29/05/2021 30/05/2021 31/05/2021 01/06/2021 02/06/2021 ...
Name1 8 8 8 8 8 0 3
Name2 0 0 5 5 5 0 0
Name3 3 3 3 3 3 3 0
Name4 0 0 8 8 8 8 8
这是一个连续几个月每天工作时间的时间表。两个 DataFrame 将具有相同的索引和行号。
根据 df2 中的日期,我需要在开始日和结束日填写 df1 值,并在此期间提供奉献时间。
我尝试了包括所有行的 loc 和 lambda 函数来根据日期选择列,但我没有在日期内获得填充值。也许我需要几个步骤。
谢谢。
解决方案
你可以试试这个:
from datetime import datetime
import pandas as pd
# Setup
limits = [("Start1", "End1", "Dedication1"), ("Start2", "End2", "Dedication2")]
df3 = df1.copy()
# Deal with NaN values
df3.fillna(0, inplace=True)
df2["Start2"].fillna("31/12/2099", inplace=True)
df2["End2"].fillna("31/12/2099", inplace=True)
df2["Dedication2"].fillna(0, inplace=True)
# Iterate and fill df3
for i, row in df1.iterrows():
for col in df1.columns:
for start, end, dedication in limits:
mask = (
datetime.strptime(df2.loc[i, start], "%d/%m/%Y")
<= datetime.strptime(col, "%d/%m/%Y")
<= datetime.strptime(df2.loc[i, end], "%d/%m/%Y")
)
if mask:
df3.loc[i, col] = df2.loc[i, dedication]
# Format df3
df3 = df3.astype("int")
print(df3)
# Outputs
27/05/2021 28/05/2021 29/05/2021 ... 31/05/2021 01/06/2021 02/06/2021
Name1 8 8 8 ... 8 0 3
Name2 0 0 5 ... 5 0 0
Name3 3 3 3 ... 3 3 0
Name4 0 0 8 ... 8 8 8
推荐阅读
- azure - 如何在 Azure Function App 中使用 .NET SDK?
- c# - 进行异步调用时出现 NullReferenceException,但在进行同步调用时不会出现
- c - 此代码在调用 create 函数后需要两个输入
- r - 如何循环遍历 2 个分类变量的独特组合以创建多个动画图?
- java - Android Java 从 URI 获取路径以获取 mp4
- powershell - 在使用 Virtualbox vdi 的 Windows Server Core 上,双向剪贴板和共享无法工作
- list - 转置二维列表并将其转换为一维列表
- python - 为什么即使我有 if_exists='append' 仍然出现“表存在”错误
- xcode - 如何在 Interface Builder 中添加 NSHostingView
- python - python 3.7.9,日志记录:在配置文件中使用文件处理程序时如何关闭日志记录输出文件?