我正在构建一个机器学习模型,我需要用合成数据填充测试数据帧.我有时间序列数据,目前看起来是这样的:

Date    DayOfWeek   Unit 
2022-10-01   7   A
2022-10-02   1   A
2022-10-03   2   A

我需要的是复制所有日期行,但我需要 for each "单位"(A、B、C、D)占一行,如下所示:

Date    DayOfWeek   Unit 
2022-10-01   7   A
2022-10-01   7   B
2022-10-01   7   C
2022-10-01   7   D
2022-10-02   1   A
2022-10-02   1   B
2022-10-02   1   C
2022-10-02   1   D
2022-10-03   2   A
2022-10-03   2   B
2022-10-03   2   C
2022-10-03   2   D

我找到了一个previous answer,它教我如何重复:

df.reindex(df.index.repeat(4)).reset_index(drop=True)

最好的方法是什么,而不是重复所有的东西,只重复‘Date’和‘DayOfWeek’,但在‘单位’上填充A到D?

推荐答案

建议使用itertools.product来达到以下目的:

from itertools import product

df = pd.DataFrame(
    data=product(
        pd.Series(pd.date_range('2022-10-01', '2022-10-03', freq='D')),
        "ABCD"
    ),
    columns=("Date", "Unit"),
)
df["DayOfWeek"] = df["Date"].dt.dayofweek.add(1)  # To Have Day of Week Starting with 1
df = df[["Date", "DayOfWeek", "Unit"]]
print(df)

输出:

         Date  DayOfWeek Unit
0  2022-10-01          6    A
1  2022-10-01          6    B
2  2022-10-01          6    C
3  2022-10-01          6    D
4  2022-10-02          7    A
5  2022-10-02          7    B
6  2022-10-02          7    C
7  2022-10-02          7    D
8  2022-10-03          1    A
9  2022-10-03          1    B
10 2022-10-03          1    C
11 2022-10-03          1    D

Python相关问答推荐

对Numpy函数进行载体化

即使在可见的情况下也不相互作用

Pandas 在最近的日期合并,考虑到破产

时间序列分解

用NumPy优化a[i] = a[i-1]*b[i] + c[i]的迭代计算

如何获取numpy数组的特定索引值?

基于索引值的Pandas DataFrame条件填充

利用Selenium和Beautiful Soup实现Web抓取JavaScript表

Pandas Loc Select 到NaN和值列表

一个telegram 机器人应该发送一个测验如何做?""

jsonschema日期格式

Python日志(log)库如何有效地获取lineno和funcName?

如何写一个polars birame到DuckDB

Pythonquests.get(Url)返回Colab中的空内容

如何从一个维基页面中抓取和存储多个表格?

Numpy`astype(Int)`给出`np.int64`而不是`int`-怎么办?

某些值的数值幂和**之间的差异

如何在基于时间的数据帧中添加计算值

将Pandas DataFrame中的列名的长文本打断/换行为_STRING输出?

合并Pandas中的数据帧,但处理不存在的列