如何编写pandas函数过滤不符合指定列数值范围的DataFrame行
问题核心原因
你两版代码的共同问题是 多列限制规则仅最后一条生效,循环过滤时没有复用前序规则的过滤结果:
- 第一版代码每次循环都基于最开始传入的原始
data_frame做当前列的范围过滤,上一轮过滤的结果会被完全覆盖,仅保留最后一次循环的筛选结果。 - 第二版代码逻辑和第一版完全一致,只是把两个判断合并成了一行,同样是每次基于原始
data_frame过滤,仅最后一条限制规则生效。
修正方案
先初始化结果数据集为原始数据,后续每轮循环都在上一轮已经过滤完成的数据集上继续应用当前列的限制规则即可,参考代码如下:
def column_cutoff(data_frame, cutoffs): # 初始化过滤结果为原始数据集,copy避免修改原数据 filtered_df = data_frame.copy() # 直接解包元组,代码可读性更高 for column_name, min_val, max_val in cutoffs: filtered_df = filtered_df[ (filtered_df[column_name] >= min_val) & (filtered_df[column_name] <= max_val) ] return filtered_df
内容的提问来源于stack exchange,提问作者laurene
相关产品推荐
相关产品推荐

