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、11cumsum():逐行计算累加值,结果依次为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
相关产品推荐
相关产品推荐

