如何用Pandas/Numpy实现DataFrame当前行除以下一行(替代循环)
Pandas实现当前行除以下一行的高效计算
当然可以用Pandas的内置方法轻松实现,而且比for循环高效太多了——尤其是当你的数据量变大时,向量化操作的优势会非常明显。
核心思路是用Pandas的shift()函数,它能帮你把列数据上下移动,完美实现"当前行对应下一行数据"的对齐需求。直接上代码:
首先先还原你的示例DataFrame:
import pandas as pd # 构建示例数据 data = { 'Date': ['26/08/17', '27/08/17', '28/08/17', '29/08/17', '30/08/17', '01/09/17', '02/09/17', '03/09/17'], 'index_numer': [200, 300, 400, 100, 150, 160, 170, 280] } df = pd.DataFrame(data)
然后一行代码生成你要的新列:
# 计算当前行除以下一行的结果 df['Divison by next row'] = df['index_numer'] / df['index_numer'].shift(-1)
代码解释
df['index_numer'].shift(-1):把index_numer列的所有数据向上移动一行,这样当前行的位置就对应了原始数据里的下一行值。- 直接做除法运算,就能得到每一行除以下一行的结果。最后一行因为没有下一行数据,会返回
NaN,和你示例里的...效果一致,你可以用df['Divison by next row'].fillna('...')把它替换成你想要的占位符,或者保留NaN。
如果需要像示例那样保留三位小数,可以加上round():
df['Divison by next row'] = (df['index_numer'] / df['index_numer'].shift(-1)).round(3)
运行后你会得到和示例完全一致的结果,而且代码简洁、执行效率远高于for循环——这也是Pandas向量化操作的核心优势。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

