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

Python如何基于条件提取DataFrame指定行并生成独立字典

Pandas DataFrame按边界行分组生成字典解决方案

核心思路

  • 先识别分组边界行:name列以指定前缀开头的行为分组分隔符
  • 给所有行打分组标签:每遇到一个边界行,分组编号累计+1,两个边界之间的行共享同一个分组编号
  • 过滤掉边界行本身,按分组编号聚合,每组转成对应字典,无需提前定义字典数量,分组数由实际数据自动决定

代码实现

import pandas as pd

# 从参考数据生成测试DataFrame
df = pd.DataFrame({
    'name': {0: '2. harry potter',
      1: '   jk rowling  ',
      2: '   testing     ',
      3: 'A. test book   ',
      4: '   author1     ',
      5: '   author2     ',
      6: '   author3     ',
      7: 'F. book3       '},
     'A': {0: 1, 1: 1, 2: 3, 3: 4, 4: 4, 5: 4, 6: 4, 7: 5},
     'space': {0: 2, 1: 4, 2: 4, 3: 2, 4: 4, 5: 4, 6: 4, 7: 2}
})

# 识别边界行:name列经过去前后空格后以指定前缀开头的行
boundary_mask = df['name'].str.strip().str.startswith(('2.', 'A.', 'F.'))
# 生成分组ID
df['group_id'] = boundary_mask.cumsum()
# 过滤边界行,保留组内内容行,同时清理name列的前后空格
valid_data = df[~boundary_mask].copy()
valid_data['name'] = valid_data['name'].str.strip()

# 按分组聚合生成字典列表
dict_list = []
for _, group in valid_data.groupby('group_id'):
    dict_list.append({
        'name': group['name'].tolist(),
        'A': group['A'].tolist(),
        'space': group['space'].tolist()
    })

# 可按需求直接取对应字典
dict_A = dict_list[0]
dict_B = dict_list[1]

输出结果

# dict_A
{'name': ['jk rowling', 'testing'], 'A': [1, 3], 'space': [4, 4]}

# dict_B
{'name': ['author1', 'author2', 'author3'], 'A': [4, 4, 4], 'space': [4, 4, 4]}

扩展说明

如果后续新增其他规则的边界前缀,只需在startswith方法的参数元组中添加对应前缀即可,无需修改其他逻辑,适配性强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:57:01