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

如何高效在DataFrame中批量转移值?替代逐个单元格赋值的方法

高效实现DataFrame跨行列的值转移(顺序/逆序)

当然有!完全不用写循环逐个赋值——Pandas的向量化操作就是解决这类问题的最优方案,不仅代码简洁,执行效率也比Python循环高几个数量级(尤其是数据量较大时)。

针对你提到的两种需求,具体实现如下:

1. 顺序值转移

源是第121行(iloc[120])的第51到100列(50:100),目标是第1到50行(0:50)的第111列(110)。我们可以直接提取源的底层数值数组,赋值给目标切片:

import pandas as pd
import numpy as np

# 创建示例DataFrame用于测试
df = pd.DataFrame(np.zeros((150, 150)))  # 150行150列的空DataFrame
df.iloc[120, 50:100] = np.arange(50)  # 给源位置填充测试数据

# 顺序转移:直接赋值源的数值数组
df.iloc[0:50, 110] = df.iloc[120, 50:100].values

这里用.values(或.to_numpy())拿到源的一维数值数组,Pandas会自动按位置匹配到目标的列切片中,完美实现cell(0,110)=cell(120,50)、cell(1,110)=cell(120,51)...的效果。

2. 逆序值转移

只需要在源数组的基础上添加反转索引[::-1],就能实现逆序赋值:

# 逆序转移:反转源数组后赋值
df.iloc[0:50, 110] = df.iloc[120, 50:100].values[::-1]

这样就会让cell(0,110)=cell(120,99)、cell(1,110)=cell(120,98)...完全符合你的需求。

为什么这方法更高效?

Pandas的向量化操作是在C语言层面执行的,避免了Python循环的额外开销。哪怕是处理上万条数据,这种方法的执行速度也会比逐个赋值快几十甚至上百倍。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:17:24