如何在pandas DataFrame中从指定索引查找指定布尔值的首次出现行
实现步骤
1. 构造示例数据
先把你提供的表格转为pandas DataFrame:
import pandas as pd data = { "A": [0.132003, 1.130127, 1.024180, 0.974466, 0.545952, -1.281247], "B": [-0.827317, -1.436737, 0.569605, -2.006747, -1.219217, -0.727707], "C": [-0.076467, -1.413681, 0.875906, -0.410001, -1.226825, -0.121306], "D": [True, True, True, False, False, True] } df = pd.DataFrame(data, index=[123, 124, 125, 126, 127, 128])
2. 核心查询代码
直接调用封装好的函数即可,你可以根据需求修改起始索引、目标布尔值、查询的布尔列名:
def find_first_boolean_row(df, start_idx, target_bool, bool_col="D"): # 第一步:从指定起始索引开始切片,只保留索引大于等于起始值的行 filtered_df = df[df.index >= start_idx] # 第二步:筛选出布尔列等于目标值的行 match_df = filtered_df[filtered_df[bool_col] == target_bool] # 第三步:返回第一个匹配的行,无匹配则返回None if not match_df.empty: return match_df.iloc[0] return None # 代入你的场景参数调用 result = find_first_boolean_row(df, start_idx=123, target_bool=False) print(result)
注意:如果你的DataFrame索引不是升序排列,执行切片前先调用
df = df.sort_index()保证索引顺序正确,避免查询结果不符合预期。
3. 返回结果示例
对应你的测试数据,输出如下:
A 0.974466 B -2.006747 C -0.410001 D False Name: 126, dtype: object
- 如果你需要返回DataFrame格式而非Series格式,把
match_df.iloc[0]改成match_df.head(1)即可 - 如果要单独取首次出现的索引值,调用
match_df.index[0]即可
内容的提问来源于stack exchange,提问作者deception
相关产品推荐
相关产品推荐

