You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas为每行时序数据生成多Unit的合成测试数据

如何为时序DataFrame生成多Unit的合成数据?

问题场景

构建机器学习模型时需要生成测试用的合成时序数据,现有DataFrame如下:

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

需要保留每行的Date和DayOfWeek并重复,同时为每个Unit(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

之前尝试用df.reindex(df.index.repeat(4)).reset_index(drop=True)重复行,但会把Unit列的A也重复,需要修改实现目标。


解决方法

方法1:基于现有repeat方法修改

先按原逻辑重复行,然后用np.tile生成循环的Unit值替换原列:

import pandas as pd
import numpy as np

# 假设原DataFrame为df
df_repeated = df.reindex(df.index.repeat(4)).reset_index(drop=True)
# 为Unit列填充A-D循环值
df_repeated['Unit'] = np.tile(['A', 'B', 'C', 'D'], len(df))

方法2:笛卡尔积合并(更简洁高效)

生成包含所有Unit的DataFrame,再与原数据去掉Unit列后做交叉合并,直接生成所有组合:

import pandas as pd

# 生成Unit列表的DataFrame
units_df = pd.DataFrame({'Unit': ['A', 'B', 'C', 'D']})
# 交叉合并生成所有Date+DayOfWeek与Unit的组合
result = df.drop('Unit', axis=1).merge(units_df, how='cross')

两种方法都能得到目标结果,方法2更符合pandas的惯用逻辑,也避免了重复后替换列的步骤。


内容的提问来源于stack exchange,提问作者Ragnar Lothbrok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 18:01:17