You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算重叠线性折线的累计和并生成对应pandas dataframe

实现思路
  • 第一步:提取所有时间节点:将原数据中Start time和End time列的所有值去重后从小到大排序,得到所有x轴采样点。
  • 第二步:计算单条折线的单位时间变化率:对每一行数据计算斜率k = Value/(End time - Start time),代表该折线在对应时间段内每单位时间的增量。
  • 第三步:逐段累计总增量:遍历相邻的两个采样点,统计所有覆盖当前时间段的折线的斜率总和,乘以时间差得到该段的总增量,累加到全局总和中,记录每个采样点对应的累计值即可。
完整代码实现
import pandas as pd

# 构造输入数据
df = pd.DataFrame({
    'Start time': [0, 20, 10],
    'End time': [50, 100, 45],
    'Value': [50, 800, 700]
})

# 1. 提取所有时间节点并排序
all_times = sorted(pd.concat([df['Start time'], df['End time']]).unique())
# 2. 提前计算每条折线的单位时间增量(斜率)
df['k'] = df['Value'] / (df['End time'] - df['Start time'])

result_list = []
total_value = 0
# 遍历每一段相邻时间区间计算增量
for i in range(len(all_times)-1):
    t_left = all_times[i]
    t_right = all_times[i+1]
    # 筛选所有覆盖当前时间段的折线
    active_line_mask = (df['Start time'] <= t_left) & (df['End time'] >= t_right)
    # 计算当前时间段总斜率
    sum_k = df.loc[active_line_mask, 'k'].sum()
    # 累加增量
    total_value += sum_k * (t_right - t_left)
    result_list.append({'x': t_right, 'value': total_value})

# 补充x=0的初始值
result_list = [{'x': all_times[0], 'value': 0}] + result_list
result_df = pd.DataFrame(result_list)

# 可按需转换为整数类型
result_df['value'] = result_df['value'].astype(int)
print(result_df)
输出结果验证
xvalue
00
1010
20220
45995
501050
1001550

内容的提问来源于stack exchange,提问作者Jing Luis Cao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:09:02