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

在pandas DataFrame中高效生成数据增强新行的最优方法

高效实现Pandas数据增强:批量生成拼接行

针对大数据量下pd.iterrows()速度过慢的问题,以下是三种高效的实现方案,均基于Pandas/Numpy的底层优化操作,性能远优于逐行遍历:

方案1:利用交叉合并(merge cross)生成笛卡尔积

通过生成变体列表的DataFrame,与原数据做交叉合并得到所有组合,再完成字符串拼接,最后合并原数据与增强数据:

import pandas as pd

# 示例原数据
df = pd.DataFrame({
    "Compliment": ["Hi", "Hello", "Hola"],
    "Sentence_ID": [1, 2, 3]
})
variations = ["Elvis", "Monica"]

# 将变体列表转为DataFrame
var_df = pd.DataFrame({"variation": variations})

# 交叉合并得到所有原行与变体的组合
merged = df.merge(var_df, how="cross")

# 拼接生成新的Compliment内容
merged["Compliment"] = merged["Compliment"] + " " + merged["variation"]

# 合并原数据与增强数据,按Sentence_ID排序
result = pd.concat([df, merged.drop("variation", axis=1)]) \
           .sort_values("Sentence_ID") \
           .reset_index(drop=True)

print(result)

该方法依赖Pandas优化的合并逻辑,适合中等规模数据集,代码可读性强。

方案2:结合apply与explode展开列表

为每行生成包含原内容和所有拼接内容的列表,再通过explode将列表拆分为多行:

import pandas as pd

df = pd.DataFrame({
    "Compliment": ["Hi", "Hello", "Hola"],
    "Sentence_ID": [1, 2, 3]
})
variations = ["Elvis", "Monica"]

# 为每行生成增强内容列表:原内容 + 所有拼接后的内容
df["Compliment"] = df["Compliment"].apply(
    lambda x: [x] + [f"{x} {var}" for var in variations]
)

# 展开列表为多行
result = df.explode("Compliment").reset_index(drop=True)

print(result)

此方法代码最简洁,apply为向量化实现,explode是Pandas高效行展开操作,适合中小规模数据集。

方案3:Numpy广播机制(超大数据量最优)

利用Numpy的广播特性直接生成所有组合,底层为C级运算,速度最快,适合百万级以上数据集:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    "Compliment": ["Hi", "Hello", "Hola"],
    "Sentence_ID": [1, 2, 3]
})
variations = ["Elvis", "Monica"]

# 广播生成所有Compliment组合:原内容 + 所有拼接内容
compliments = np.concatenate([
    df["Compliment"].values[:, np.newaxis],
    df["Compliment"].values[:, np.newaxis] + " " + np.array(variations)[np.newaxis, :]
], axis=1).flatten()

# 广播生成对应的Sentence_ID(重复原ID len(variations)+1次)
sentence_ids = np.repeat(df["Sentence_ID"].values, len(variations)+1)

# 构造结果DataFrame
result = pd.DataFrame({
    "Compliment": compliments,
    "Sentence_ID": sentence_ids
})

print(result)

方案选择参考

  • 中小数据集:优先选方案2,代码简洁易维护
  • 中等数据集:方案1稳定可靠,逻辑清晰
  • 超大数据集:方案3性能最优,运算速度远超前两者

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:06:39