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

Pandas DataFrame指定列自下向上累加达给定值时返回对应索引的求解

Pandas 倒序累加匹配索引实现方案

推荐实现(Pandas 向量化,无需手动循环)

核心逻辑是将目标列倒序后计算累加和,匹配到首次等于目标值的位置后直接取对应原索引,执行效率远高于手动循环。

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame(
    {'A': [11,9,10,8,2,11,7,10]},
    index=[0,1,2,3,4,5,6,7]
)
target = 28

# 倒序计算A列的累加和
reverse_cumsum = df['A'][::-1].cumsum()
# 提取首次匹配目标累加和的原索引
match_idx = reverse_cumsum[reverse_cumsum == target].index[0]

print(match_idx) # 输出结果:5

代码分步说明:

  • df['A'][::-1]:将A列从最后一行到第一行倒序排列,示例倒序后值依次为10、7、11、2、8、10、9、11
  • cumsum():逐行计算累加值,结果依次为10、17、28、30...,首次等于28的节点对应原索引即为5

可选实现(for 循环版本)

如果需要手动控制循环逻辑,可以按从下到上遍历索引的方式实现:

sum_total = 0
target = 28

# 倒序遍历DataFrame的索引
for idx in reversed(df.index):
    sum_total += df.loc[idx, 'A']
    if sum_total == target:
        print(idx) # 输出结果:5
        break

注意事项

如果业务场景中可能出现没有刚好匹配目标累加和的情况,可提前加判断避免索引越界报错:

if reverse_cumsum.isin([target]).any():
    match_idx = reverse_cumsum[reverse_cumsum == target].index[0]
else:
    # 自定义未匹配的处理逻辑
    match_idx = None

内容的提问来源于stack exchange,提问作者Vidar Solheim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:06:04