DataFrame行筛选问题:按2day列条件取数及IF/While实现
嘿,针对你提出的两个DataFrame筛选需求,我整理了具体的实现方案——包括实际工作中更常用的pandas内置高效方法,以及你要求的基于if、while条件的循环实现:
需求1:返回2day列得分最高的2行
核心思路
先对2day列进行降序排序,再提取前2行数据。如果用循环结合条件判断,需要先确定前两大的数值,再筛选对应行,或者通过循环控制取数数量。
方法1:Pandas内置高效实现(推荐)
这是日常工作中最常用的方式,效率远高于循环:
import pandas as pd # 构建你的DataFrame df = pd.DataFrame({ 'names': ['ab', 'bc', 'cd', 'ef'], '1day': [20, 30, 40, 15], '2day': [6, 3, 10, 8] }) # 按2day降序排序,取前2行 top_2_rows = df.sort_values(by='2day', ascending=False).head(2) print(top_2_rows)
方法2:用if条件结合循环实现
通过遍历每行,用if判断当前行2day值是否属于前两大的数值:
# 获取2day列的所有值,排序后提取前两大的数值 top_two_values = sorted(df['2day'].tolist(), reverse=True)[:2] result = [] for idx, row in df.iterrows(): # 判断当前行的2day值是否在目标数值列表中 if row['2day'] in top_two_values: result.append(row) top_2_rows_if = pd.DataFrame(result) print(top_2_rows_if)
方法3:用while条件实现
先排序,再通过while循环控制取数数量,直到取满2行:
# 先按2day降序排序 sorted_df = df.sort_values(by='2day', ascending=False) result = [] count = 0 row_iter = sorted_df.iterrows() while count < 2: try: idx, row = next(row_iter) result.append(row) count += 1 except StopIteration: break # 防止数据不足2行的情况 top_2_rows_while = pd.DataFrame(result) print(top_2_rows_while)
需求2:返回2day列值处于4到9之间的行
核心思路
判断每行2day值是否在[4,9]区间内,既可以用pandas布尔索引直接筛选,也可以通过循环结合条件判断实现。
方法1:Pandas内置高效实现(推荐)
布尔索引是pandas筛选数据的核心方式,简洁直观:
# 用布尔索引筛选4<=2day<=9的行 middle_rows = df[(df['2day'] >= 4) & (df['2day'] <= 9)] print(middle_rows)
方法2:用if条件结合循环实现
遍历每行,用if判断数值是否在目标区间内:
result = [] for idx, row in df.iterrows(): # 判断2day值是否处于4到9之间(包含边界) if 4 <= row['2day'] <= 9: result.append(row) middle_rows_if = pd.DataFrame(result) print(middle_rows_if)
方法3:用while条件实现
通过while循环遍历所有行,逐个判断并收集符合条件的数据:
result = [] row_iter = df.iterrows() while True: try: idx, row = next(row_iter) if 4 <= row['2day'] <= 9: result.append(row) except StopIteration: break # 遍历完所有行后退出循环 middle_rows_while = pd.DataFrame(result) print(middle_rows_while)
内容的提问来源于stack exchange,提问作者chaitanya yatam
相关产品推荐
相关产品推荐

