如何基于pandas DataFrame按id分组生成指定结构的JSON数组
Pandas 分组聚合生成指定结构JSON实现方案
核心实现逻辑
因为同一id下的desc和eml值固定,所以按id分组后,固定字段直接取首个值即可,field_name和val字段逐行打包后聚合成二维列表。
完整代码示例
import pandas as pd import json # 1. 构造示例DataFrame(你如果有现成df可以跳过这一步) data = { "id": [1, 1, 2, 2, 2], "desc": ["desc in id 1", "desc in id 1", "desc in id 2", "desc in id 2", "desc in id 2"], "field_name": ["field_1", "field_2", "field_3", "field_4", "field_1"], "val": [300, 305, 530, 745, 845], "eml": ["test@gmail.com", "test@gmail.com", "test2@gmail.com", "test2@gmail.com", "test2@gmail.com"] } df = pd.DataFrame(data) # 2. 自定义分组处理逻辑 def group_handler(group): return pd.Series({ "desc": group["desc"].iloc[0], "eml": group["eml"].iloc[0], "values": group[["field_name", "val"]].values.tolist() }) # 3. 按id分组聚合 result_df = df.groupby("id", as_index=False).apply(group_handler) # 4. 转成目标JSON格式 # 直接输出无格式JSON用这行 # result_json = result_df.to_json(orient="records", force_ascii=False) # 输出格式化带缩进的JSON用下面两行 result_dict = result_df.to_dict(orient="records") formatted_json = json.dumps(result_dict, indent=4, ensure_ascii=False) print(formatted_json)
输出验证
运行上述代码后输出的JSON结构和你要求的完全一致,数值类型会自动保留,不需要额外转换。
内容的提问来源于stack exchange,提问作者geek glance
相关产品推荐
相关产品推荐

