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

如何在循环中将每次迭代的Series追加为Pandas DataFrame新列?

解决方案:循环生成Series并添加为DataFrame新列

首先我得说,在pandas里处理这类需求,先收集所有要添加的Series再一次性合并是最高效的方式(尤其是数据量大的时候),毕竟pandas每次追加列都会复制数据,循环里反复操作会拖慢速度。当然如果你的数据量很小,直接在循环里加列也完全没问题,两种方法我都给你列出来。

方法1:先收集Series,再一次性合并(推荐)

假设你的循环是基于某个迭代对象(比如不同年份、类别),每次生成一个GC_tX格式的Series,步骤如下:

import pandas as pd

# 模拟你的原DataFrame ar(已存在且包含'year of application'列)
ar = pd.DataFrame({'year of application': [2020, 2021, 2022, 2023],
                   'existing_col': [10, 20, 30, 40]})

# 初始化空字典,用来暂存所有要添加的Series
new_cols_dict = {}

# 模拟你的循环:这里以生成GC_t1、GC_t2为例
for i in range(1, 3):
    # 替换成你从透视表选择列生成Series的代码
    # 核心要求:生成的Series索引必须和ar的索引完全匹配!否则会出现数据错位
    gc_series = pd.Series([i*100, i*200, i*300, i*400], index=ar.index)
    # 给列起名字,比如GC_t1、GC_t2
    col_name = f'GC_t{i}'
    # 将Series存入字典
    new_cols_dict[col_name] = gc_series

# 把字典转成DataFrame,和原ar按列合并
ar = pd.concat([ar, pd.DataFrame(new_cols_dict)], axis=1)

# 查看最终结果
print(ar)

运行后你会看到ar成功新增了GC_t1和GC_t2两列,完全符合你的需求。

方法2:循环中直接追加列(适合小数据量)

如果数据量不大,不想折腾字典收集,也可以直接在循环里给ar新增列:

import pandas as pd

ar = pd.DataFrame({'year of application': [2020, 2021, 2022, 2023],
                   'existing_col': [10, 20, 30, 40]})

for i in range(1, 3):
    # 生成目标Series,注意索引匹配
    gc_series = pd.Series([i*100, i*200, i*300, i*400], index=ar.index)
    col_name = f'GC_t{i}'
    # 直接赋值给ar的新列
    ar[col_name] = gc_series

print(ar)

关键注意事项!

  • 必须保证生成的Series索引和原DataFrame ar的索引完全一致,否则pandas会自动对齐索引,导致数据错位或出现NaN值。
  • 如果你的透视表生成的Series索引和ar不匹配(比如透视表索引是年份值,而ar用的是默认数字索引),可以用reindex对齐:
    # 假设gc_series的索引是年份(如2020、2021),ar的'year of application'是对应列
    gc_series = gc_series.reindex(ar['year of application'])
    # 对齐后再赋值给ar的新列
    ar[col_name] = gc_series
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:59:41