在Pandas DataFrame中计算相邻行差值并存储到新列的问题
解决方法
直接用Pandas内置的diff()方法,一行代码就能完成需求,比写循环高效太多:
db['diff'] = db['ts'].diff()
这个方法会自动计算每一行与前一行的差值,第一行因为没有前一行数据,结果会是NaN。如果需要给第一行设置特定值(比如0),可以补充填充操作:
db['diff'] = db['ts'].diff().fillna(0)
循环代码的问题
你当前的循环每次执行db['diff'] = db['ts'][i+1] - db['ts'][i]时,是把整个diff列都替换成当前单次计算的差值,而不是给对应行赋值。循环结束后,diff列只会保留最后一次循环的计算结果,自然无法得到逐行的差值。如果非要用循环(不推荐,大数据量下效率极低),得改成给对应行赋值:
for i in np.arange(len(db)-1): db.loc[i+1, 'diff'] = db['ts'][i+1] - db['ts'][i] # 手动设置第一行的diff值,比如设为0 db.loc[0, 'diff'] = 0
内容的提问来源于stack exchange,提问作者Mitch
相关产品推荐
相关产品推荐

