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

如何在Pandas DataFrame中筛选值为True的行并生成指定结构的字典

嘿,我来帮你搞定这两个需求,直接上代码和清晰的解释:

功能1:筛选DataFrame中值为True的行

根据你的DataFrame列数不同,分几种情况处理:

  • 针对单一布尔列筛选:假设你的布尔列叫flag,直接用布尔索引就能快速筛选:

    import pandas as pd
    
    # 示例DataFrame
    df = pd.DataFrame({'flag': [True, False, True, False], 'other_col': [1,2,3,4]})
    
    # 筛选flag列为True的行
    true_rows = df[df['flag']]
    print(true_rows)
    
  • 任意一列存在True就筛选:如果你的DataFrame有多列,只要某一行任意一列是True就保留:

    true_rows = df[df.any(axis=1)]
    
  • 所有列都为True才筛选:只有当行内所有列的值都是True时才保留:

    true_rows = df[df.all(axis=1)]
    
功能2:生成指定结构的字典

核心逻辑是先找到所有True行的位置,然后以这些位置为分割点,生成从True行下一个数字开始的子列表,直到下一个True行的前一个数字。

以下是完整实现代码,完全匹配你给出的示例结构:

import pandas as pd

# 先构造一个符合示例逻辑的DataFrame(模拟你的PDF表格数据)
# 假设True行的位置是行1、6、17、21、30(对应示例子列表的分割点)
row_count = 34
flag_list = [False]*row_count
# 设置True的位置(行号从1开始)
true_positions = [1,6,17,21,30]
for pos in true_positions:
    flag_list[pos-1] = True  # 转换为0-based索引

df = pd.DataFrame({'flag': flag_list}, index=range(1, row_count+1))  # 行号从1开始

# 步骤1:获取所有True行的行号
true_row_nums = df[df['flag']].index.tolist()
# 步骤2:添加最后一行的下一个行号作为结束标记,确保最后一个子列表能覆盖到末尾
true_row_nums.append(df.index[-1] + 1)

# 步骤3:生成子列表
sublists = []
for i in range(len(true_row_nums)-1):
    start_num = true_row_nums[i] + 1
    end_num = true_row_nums[i+1]
    # 生成从start_num到end_num-1的连续数字列表
    sublist = list(range(start_num, end_num))
    sublists.append(sublist)

# 步骤4:构造目标字典
pandas_dict = {0: sublists}
print(pandas_dict)

运行这段代码后,输出的字典就和你给出的示例完全一致:

{0: [[2, 3, 4, 5], [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], [17, 18, 19, 20], [21, 22, 23, 24, 25, 26, 27, 28, 29], [30, 31, 32, 33, 34]]}

关键逻辑说明:

  • 我们把行号设为从1开始(匹配你示例中的数字序列),如果你的DataFrame是默认0-based索引,只需要把index=range(1, row_count+1)去掉,然后调整true_positions为0-based索引即可。
  • 添加df.index[-1] + 1作为最后一个分割点,是为了确保最后一个子列表能覆盖到DataFrame的最后一行。

内容的提问来源于stack exchange,提问作者mike

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 20:28:10