python - Pandas :从一行创建多行 'dummy data'

标签 python pandas time-series

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

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

我需要复制所有日期行,但每个“单位”(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)

最好的方法是什么,而不是重复所有内容,只重复“日期”和“星期几”,但在“单位”上填充 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 - Pandas :从一行创建多行 'dummy data',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73899974/

相关文章:

python - 在 Pandas 中读取、选择和重新排列列

python-3.x - 在 Pandas 系列对象中查找非整数值

r - 绘制时间序列样本

python - 如何根据当前行的条件获取 pandas GroupBy Dataframe 的前几行?

r - 如何对数据框中的多个时间序列进行多个静态测试

python - 返回BeautifulSoup属性错误: 'NoneType' object has no attribute 'encode'

python - python : equivalent to fig. set_facecolor 中的 Matplotlib mpl.rcParams?

Python读取带有相关子元素的xml

python - 在python中使用BeautifulSoup提取id以特定字符串开头的元素

python - 获取 numpy 数组中 N 个最大值的索引,并随机打破平局