You need to enable JavaScript to run this app. Pandas按条件计算Slope后按对应行数重复填充新列问题
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 07:15:00