如何将动态表格中h列与多组t、c列数据匹配并转为JSON
实现H-T-C层级关联并生成目标JSON
你当前的代码已完成T与C的匹配,但缺少H与对应T组的关联逻辑。核心解决思路是先填充H列的空值,让每一行明确归属的H,再按H分组整理对应的T和C集合。
关键步骤说明
- 填充H列空值:原表格中H列的空行属于上一个非空的H,用
ffill()方法可快速填充,确保每一行都有对应的H归属。 - 建立Flag与T的映射:每个非空的T行对应唯一flag,先存储该映射关系,避免重复提取T值。
- 按H和Flag分组整理:通过分组操作,将同一H下的所有T及其对应的C列表整合为层级结构。
修改后的完整代码
import pandas as pd import json # 读取Excel数据 df = pd.read_excel("sheet.xlsx") # 向前填充H列空值,让每一行都明确归属的H df['h'] = df['h'].ffill() # 建立flag到对应T值的映射(每个flag对应唯一T) flag_to_t = df.dropna(subset=['t']).set_index('flag')['t'].to_dict() # 构建H-T-C层级字典 result = {} for (h_val, flag), group in df.groupby(['h', 'flag']): t_val = flag_to_t[flag] # 提取当前组的C值并转为列表 c_list = group['c'].dropna().tolist() # 组装层级结构 if h_val not in result: result[h_val] = {} result[h_val][t_val] = c_list # 生成格式化JSON并保存 with open("new_json.json", "w", encoding='utf-8') as file: json.dump(result, file, indent=4, ensure_ascii=False)
示例输出JSON结构
运行代码后,针对你提供的示例表格,生成的JSON结构如下:
{ "h1": { "t001 random text (from h1 just show where match)": [ "c001-random text", "c002 random text" ], "t002 random text": [ "c001-random text", "c002-random text", "c003-random text" ], "t003 random text": [ "c001-random text" ] }, "h2": { "t001 random text": [ "c001-random text", "c002 random text" ], "t002 random text": [ "c001-random text", "c002-random text" ] } }
内容的提问来源于stack exchange,提问作者mister unknow
相关产品推荐
相关产品推荐

