Pandas按条件计算Slope后按对应行数重复填充新列问题
实现方案
问题原因
- 第二次循环时没有重置
sumdist、sumalt、cntx的初始值,使用的是第一次计算斜率后的残留值 - 没有记录每个斜率对应的参与计算行数,也没有按对应次数生成填充序列
完整实现代码
import pandas as pd data = [ [11.2, 0], [11.2, 3.018], [10.9, 4.18], [10.1, 4.873], [9.9 , 5.499], [9.4 , 5.923], [9.2 , 6.415], [8.5 , 1.063], [8.4 , 1.667], [7.9 , 3.114] ] df = pd.DataFrame( data, columns=['Altitude','Distance']) # 一次性完成斜率计算和填充列生成 slope_col = [] sumdist = 0 sumalt = 0 cntx = 0 for i in range(df.shape[0]): sumdist += df.loc[i,'Distance'] sumalt += df.loc[i,'Altitude'] cntx += 1 if sumdist >= 10: current_slope = sumalt / cntx / sumdist # 按当前块的行数重复斜率值加入填充列 slope_col.extend([current_slope]*cntx) sumdist = sumalt = 0 cntx = 0 # 处理最后剩余的不满10的行 if cntx: current_slope = sumalt / cntx / sumdist slope_col.extend([current_slope]*cntx) # 赋值到DataFrame新列 df['Slope'] = slope_col print(df)
输出结果
Altitude Distance Slope 0 11.2 0.000 0.898848 1 11.2 3.018 0.898848 2 10.9 4.180 0.898848 3 10.1 4.873 0.898848 4 9.9 5.499 0.844861 5 9.4 5.923 0.844861 6 9.2 6.415 0.693368 7 8.5 1.063 0.693368 8 8.4 1.667 0.693368 9 7.9 3.114 0.693368
内容的提问来源于stack exchange,提问作者Allin
相关产品推荐
相关产品推荐

