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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:03:56