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
相关产品推荐
相关产品推荐

