如何高效在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
相关产品推荐
相关产品推荐

