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

如何更高效复制pandas DataFrame并添加取值不同的新列

你原来的写法逻辑正确可正常运行,只是当原表数据量较大时,两次全表复制会带来不必要的内存开销,下面是两种更高效的实现方案:

方案1:行重复+直接赋值(性能最优)

无需多次复制全表,先将每行重复2次后直接给新列赋值,内存开销最低,适合大表场景:

import pandas as pd
import numpy as np
from datetime import datetime

# 原始DataFrame构造
d = {'account_id': [1, 2], 'type': ['a', 'b']}
df = pd.DataFrame(data=d)

# 高效实现逻辑
df = df.loc[df.index.repeat(2)].reset_index(drop=True)
df['include_images'] = [True, False] * (len(df) // 2)
df['data_since'] = np.where(df['include_images'], datetime(2018,1,1), pd.NaT)

方案2:交叉合并(可读性+扩展性最优)

如果后续可能新增更多配置规则,建议用配置表交叉合并的写法,代码逻辑更清晰,修改规则只需要调整配置表即可:

# 构造配置表,后续新增规则只需要修改这部分
config_df = pd.DataFrame({
    'include_images': [True, False],
    'data_since': [datetime(2018,1,1), pd.NaT]
})

# pandas 1.2.0及以上版本支持how='cross'
df = df.merge(config_df, how='cross')

# 低版本pandas兼容写法
# df['tmp'] = 1
# config_df['tmp'] = 1
# df = df.merge(config_df, on='tmp').drop('tmp', axis=1)

两种方案最终输出的结果和你现有实现完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 10:36:03