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

如何将三列Pandas DataFrame转换为多线图所需JSON格式?

问题描述

现有如下三列Pandas DataFrame:

iddatecount
A01-Nov20
A02-Nov30
A03-Nov50
B01-Nov10
B02-Nov45
B03-Nov23
C01-Nov12
C02-Nov34
C03-Nov45

生成该DataFrame的代码:

import pandas as pd
df = pd.DataFrame({'id': ['A']*3+['B']*3+['C']*3
                   , 'date': ['01-Nov','02-Nov','03-Nov']*3
                   , 'count': [20,30,50,10,45,23,12,34,45]})

需要将其转换为适用于多线图的指定JSON格式:

{
    "date": [
        "01 Nov",
        "02 Nov",
        "03 Nov"
    ], 
    "values": [
        {
            "id": "A",
            "count": [20,30,50]
        },
        {
            "id": "B",
            "count": [10,45,23]
        },
        {
            "id": "C",
            "count": [12,34,45]
        }
    ]
}

直接使用to_json方法无法得到上述目标格式,寻求可行的转换方法。

解决方法

用Pandas的分组、聚合操作配合Python字典构造就能实现目标格式,具体步骤和代码如下:

  1. 先处理日期格式,把原数据中date列的-替换成空格,提取唯一的日期列表;
  2. 按id分组,把每个分组的count值整理成列表;
  3. 把日期列表和分组结果组合成目标结构的字典,再转成JSON字符串。

完整代码实现

import pandas as pd
import json

# 生成原始DataFrame
df = pd.DataFrame({'id': ['A']*3+['B']*3+['C']*3
                   , 'date': ['01-Nov','02-Nov','03-Nov']*3
                   , 'count': [20,30,50,10,45,23,12,34,45]})

# 处理日期并提取唯一值
date_list = df['date'].str.replace('-', ' ').unique().tolist()

# 按id分组,将count转为列表
values_list = []
for id_val, group in df.groupby('id'):
    values_list.append({'id': id_val, 'count': group['count'].tolist()})

# 构造目标字典并转JSON
result = {
    'date': date_list,
    'values': values_list
}

# 输出格式化后的JSON
print(json.dumps(result, indent=4))

简洁写法

如果想更精简,也可以用groupby结合to_dict的方式实现:

import pandas as pd
import json

df = pd.DataFrame({'id': ['A']*3+['B']*3+['C']*3
                   , 'date': ['01-Nov','02-Nov','03-Nov']*3
                   , 'count': [20,30,50,10,45,23,12,34,45]})

date_list = df['date'].str.replace('-', ' ').unique().tolist()
# 分组后直接转成字典列表
values_list = df.groupby('id')['count'].apply(list).reset_index().to_dict('records')

result = {'date': date_list, 'values': values_list}
print(json.dumps(result, indent=4))

注意:目标示例JSON中日期列表末尾的逗号不符合JSON标准,上述代码输出会自动去掉该多余逗号,保证JSON格式合法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:15:35