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

如何为OrderedDict中DataFrame的行实现三次重复?

问题解决:Excel工作表行重复三次的实现

问题核心

你读取Excel为包含3个DataFrame的OrderedDict后,尝试让每行重复三次,但生成的Excel仅保留原表结构,未实现行重复。问题出在循环中未将处理后的DataFrame更新回原字典——你只是给循环变量df重新赋值,原dfs字典里的DataFrame完全没变化。

解决方案

方案1:使用Numpy实现行重复

修正循环逻辑,将处理后的DataFrame存回原字典:

import pandas as pd
import numpy as np

# 读取Excel为字典
path_excel_file = r'C:\Users\machukovich\Desktop\stack.xlsx'
dfs = pd.read_excel(path_excel_file, sheet_name=None, skiprows=2)

# 用Numpy重复每行3次,并更新回字典
for sheet_name, df in dfs.items():
    # 用np.repeat重复行,再重构DataFrame
    repeated_df = pd.DataFrame(np.repeat(df.values, 3, axis=0), columns=df.columns)
    # 关键:将处理后的DataFrame存回原字典
    dfs[sheet_name] = repeated_df

# 后续添加列等操作(修正后可正常作用于重复后的DataFrame)
mylist = ['good song','average song', 'bad song']
for sheet_name, df in dfs.items():
    df['opinion'] = np.resize(mylist, len(df))
    df.insert(5, 'concatenation', df['Name'].astype(str) + df['Surname'].astype(str) + df['opinion'].astype(str))

# 写入新Excel
Path_new_file = r'C:\Users\machukovich\Desktop\new_file.xlsx'
with pd.ExcelWriter(Path_new_file, engine='xlsxwriter') as writer:
    for sheet_name, df in dfs.items():
        df.to_excel(writer, sheet_name=sheet_name, startrow=2, index=False)

方案2:使用Pandas原生方法实现行重复

无需依赖Numpy,直接用Pandas的index.repeat方法:

import pandas as pd
import numpy as np

path_excel_file = r'C:\Users\machukovich\Desktop\stack.xlsx'
dfs = pd.read_excel(path_excel_file, sheet_name=None, skiprows=2)

# Pandas原生方式重复每行3次
for sheet_name, df in dfs.items():
    # 利用索引重复来实现行重复,自动保留列名和数据类型
    repeated_df = df.loc[df.index.repeat(3)].reset_index(drop=True)
    dfs[sheet_name] = repeated_df

# 后续列操作同方案1
mylist = ['good song','average song', 'bad song']
for sheet_name, df in dfs.items():
    df['opinion'] = np.resize(mylist, len(df))
    df.insert(5, 'concatenation', df['Name'].astype(str) + df['Surname'].astype(str) + df['opinion'].astype(str))

# 写入新Excel
Path_new_file = r'C:\Users\machukovich\Desktop\new_file.xlsx'
with pd.ExcelWriter(Path_new_file, engine='xlsxwriter') as writer:
    for sheet_name, df in dfs.items():
        df.to_excel(writer, sheet_name=sheet_name, startrow=2, index=False)

说明

两种方案都能实现每行重复3次的需求:

  • Numpy方案通过直接操作底层数组实现,适合需要更灵活数组操作的场景;
  • Pandas方案更简洁,保留原DataFrame的数据类型(比如ID列的整数类型),无需重构列名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:25:06