Pandas条件筛选未返回对应行,如何获取累计总额刚低于160的行
解决Pandas筛选“刚低于指定值”行的问题
先看你的DataFrame数据:
amount price total running_total
0 10 6.0 60.0 60.0
1 12 5.5 66.0 126.0
2 8 5.0 40.0 166.0
3 6 4.8 28.8 194.8
你要找的是running_total刚低于160的行,也就是所有小于160的running_total里数值最大的那一行(对应索引1的126.0)。如果直接用df[df['running_total'] < 160],会返回前两行,但这不是你要的“刚低于”的单行结果,所以需要进一步处理。
这里有两种简单的实现方式:
方法1:直接取筛选结果的最后一行
因为你的running_total是累加(cumsum)生成的递增序列,所以筛选出的小于160的行里,最后一行就是最接近160的那一行:
# 筛选出所有running_total <160的行,取最后一行 target_row = df[df['running_total'] < 160].iloc[-1] print(target_row)
输出结果:
amount 12.0 price 5.5 total 66.0 running_total 126.0 Name: 1, dtype: float64
方法2:先找到目标最大值再匹配
先找出所有小于160的running_total中的最大值,再根据这个值筛选对应行,这种方法不依赖行的顺序,适用性更广:
# 计算小于160的running_total的最大值 max_below = df[df['running_total'] < 160]['running_total'].max() # 筛选对应行 target_row = df[df['running_total'] == max_below] print(target_row)
输出结果:
amount price total running_total 1 12 5.5 66.0 126.0
内容的提问来源于stack exchange,提问作者Lloyd_Xmas
相关产品推荐
相关产品推荐

