My df looks like the following:

ds          | col1 | col2 |col3 |values
01/01/2020.    x0.     y0.  z0.   12
01/02/2020.    x0.     y0.  z0.   11
01/03/2020.    x1.     y0.  z0.   14
01/02/2020.    x0.     y1.  z0.   19
01/03/2020.    x0.     y1.  z0.   11

wif a fixed start date= 01/01/2020 and end date=01/03/2020, me want to fill the missing dates value for each combinations of col1, col2, and col3. The output should be the following:

ds          | col1 | col2 |col3 |values
01/01/2020.    x0.     y0.  z0.   12
01/02/2020.    x0.     y0.  z0.   11
01/03/2020.    x0.     y0.  z0.   NaN
01/01/2020.    x1.     y0.  z0.   Nan
01/02/2020.    x1.     y0.  z0.   Nan
01/03/2020.    x1.     y0.  z0.   14
01/01/2020.    x0.     y1.  z0.   Nan
01/02/2020.    x0.     y1.  z0.   19
01/03/2020.    x0.     y1.  z0.   11

推荐答案

Try:

# ensure datetime:
df["ds"] = pd.to_datetime(df["ds"], dayfirst=True)

dr = pd.date_range("2020-01-01", "2020-03-01", freq="MS")


def reindex(df, cols_to_fill=("col1", "col2", "col3")):
    df = df.set_index("ds").reindex(dr)
    df.loc[:, cols_to_fill] = df.loc[:, cols_to_fill].ffill().bfill()
    return df.reset_index().rename(columns={"index": "ds"})


df = (
    df.groupby(["col1", "col2", "col3"], sort=False, group_keys=False)
    .apply(reindex)
    .reset_index(drop=True)
)
print(df)

Prints:

          ds col1 col2 col3  values
0 2020-01-01   x0   y0   z0    12.0
1 2020-02-01   x0   y0   z0    11.0
2 2020-03-01   x0   y0   z0     NaN
3 2020-01-01   x1   y0   z0     NaN
4 2020-02-01   x1   y0   z0     NaN
5 2020-03-01   x1   y0   z0    14.0
6 2020-01-01   x0   y1   z0     NaN
7 2020-02-01   x0   y1   z0    19.0
8 2020-03-01   x0   y1   z0    11.0

Python相关问答推荐

气流:无法配置处理程序“处理器”

将每个组的第一个元素替换为其聚合函数

IQR 的 Python 箱线图大小从 50% 到 70%

如何编写这个 for 循环以在 Python 中更快地处理?

Pandas:更具响应性的语法或函数,将列中单元格的值与前一个单元格和其他列进行比较

在 matplotlib 中按Angular 为线条分配 colored颜色

多进程调用 numpy 共轭期间的奇怪行为

来自 DataFrame 列的随机样本列表值

Python Pandas,运行总和,基于先前行的值并分组

FastAPI - 编写具有多个条件的 REST API 的最佳实践

过滤具有连续数字的行

在python中生成模块属性

将多个列表写入 CSV 中单个单元格中的不同列

Linux命令行中Python对象类的子类

为什么没有 keras.engine 的文档?

如何从嵌套字典中返回最大值及其关联键

使用 os.listdir() 时的 FileNotFoundError 回溯(最后一次调用)

Python中网格网格中的正方形图

将区间以 [1,0,-1] 开始和停止的列表转换为阶跃函数 [0, 1]

根据值对列表中的元素进行排序