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

字典列表转Dataframe时如何合并为单个Dataframe?

如何将字典列表转换为单个带重复计数的DataFrame?

我尝试将字典列表转换为单个带重复词计数的DataFrame,但目前转换后生成了多个独立的DataFrame,需要合并成一个统一的DataFrame。

数据示例

我的字典列表数据rows_data示例如下(原数据为多个子列表直接拼接的格式):

[{'case_id': 22, 'case_subject': 'followup'}, {'case_id': 22, 'case_subject': 'rma'}, {'case_id': 22, 'case_subject': 'ticket'}, {'case_id': 22, 'case_subject': '61555'}][{'case_id': 26, 'case_subject': 'c'}, {'case_id': 26, 'case_subject': 'ge'},{'case_id':26,'case_subject': 'app'}, {'case_id': 26, 'case_subject': 'logs'},{'case_id':26, 'case_subject': 'request'}][{'case_id': 30, 'case_subject': 'refund'}, {'case_id': 30, 'case_subject': 'request'}, {'case_id': 30, 'case_subject': 'return'},{'case_id': 30, 'case_subject': 'refund'}, {'case_id': 30, 'case_subject': 'pending'}, {'case_id': 30, 'case_subject': 'partial'}, {'case_id': 30, 'case_subject': 'payment'}][{'case_id': 34, 'case_subject': 'unable'}, {'case_id': 34, 'case_subject': 'control'},{'case_id': 34, 'case_subject': 'devices'}, {'case_id': 34, 'case_subject': 'via'}, {'case_id': 34, 'case_subject': 'mfg'}, {'case_id': 34, 'case_subject': 'configured'}, {'case_id': 34, 'case_subject': 'devices'}][{'case_id': 38, 'case_subject': 'trouble'}, {'case_id': 38, 'case_subject': 'connecting'}, {'case_id': 38, 'case_subject': 'alexa'}]

尝试的代码

我用来转换并生成计数的代码如下:

import pandas as pd

df = pd.DataFrame(rows_data)
out = df.assign(case_subject =df['case_subject'].str.split())\
        .explode('case_subject').value_counts()\
        .rename('Case_Subject_Split_Count').reset_index()
print(out)

当前输出

执行后得到多个独立的DataFrame输出:

case_id case_subject  Case_Subject_Split_Count
0       22        61555                         1
1       22     followup                         1
2       22          rma                         1
3       22       ticket                         1
   case_id case_subject  Case_Subject_Split_Count
0       26          app                         1
1       26            c                         1
2       26           ge                         1
3       26         logs                         1
4       26      request                         1
   case_id case_subject  Case_Subject_Split_Count
0       30       refund                         2
1       30      partial                         1
2       30      payment                         1
3       30      pending                         1
4       30      request                         1
5       30       return                         1
   case_id case_subject  Case_Subject_Split_Count
0       34      devices                         2
1       34   configured                         1
2       34      control                         1
3       34          mfg                         1
4       34       unable                         1
5       34          via                         1
   case_id case_subject  Case_Subject_Split_Count
0       38        alexa                         1
1       38   connecting                         1
2       38      trouble                         1

期望输出

我需要的是合并后的单个DataFrame:

case_id case_subject  Case_Subject_Split_Count
     22        61555                         1
     22     followup                         1
     22          rma                         1
     22       ticket                         1
     26          app                         1
     26            c                         1
     26           ge                         1
     26         logs                         1
     26      request                         1
     30       refund                         2
     30      partial                         1
     30      payment                         1
     30      pending                         1
     30      request                         1
     30       return                         1
     34      devices                         2
     34   configured                         1
     34      control                         1
     34          mfg                         1
     34       unable                         1
     34          via                         1
     38        alexa                         1
     38   connecting                         1
     38      trouble                         1

解决方案

问题出在rows_data的格式或处理逻辑上,有两种解决方式:

方式1:合并为单一字典列表

如果rows_data是多个独立的子列表,先将它们合并成一个包含所有字典的大列表:

rows_data = [
    {'case_id': 22, 'case_subject': 'followup'},
    {'case_id': 22, 'case_subject': 'rma'},
    {'case_id': 22, 'case_subject': 'ticket'},
    {'case_id': 22, 'case_subject': '61555'},
    {'case_id': 26, 'case_subject': 'c'},
    {'case_id': 26, 'case_subject': 'ge'},
    {'case_id':26,'case_subject': 'app'},
    {'case_id': 26, 'case_subject': 'logs'},
    {'case_id':26, 'case_subject': 'request'},
    {'case_id': 30, 'case_subject': 'refund'},
    {'case_id': 30, 'case_subject': 'request'},
    {'case_id': 30, 'case_subject': 'return'},
    {'case_id': 30, 'case_subject': 'refund'},
    {'case_id': 30, 'case_subject': 'pending'},
    {'case_id': 30, 'case_subject': 'partial'},
    {'case_id': 30, 'case_subject': 'payment'},
    {'case_id': 34, 'case_subject': 'unable'},
    {'case_id': 34, 'case_subject': 'control'},
    {'case_id': 34, 'case_subject': 'devices'},
    {'case_id': 34, 'case_subject': 'via'},
    {'case_id': 34, 'case_subject': 'mfg'},
    {'case_id': 34, 'case_subject': 'configured'},
    {'case_id': 34, 'case_subject': 'devices'},
    {'case_id': 38, 'case_subject': 'trouble'},
    {'case_id': 38, 'case_subject': 'connecting'},
    {'case_id': 38, 'case_subject': 'alexa'}
]

之后再执行你原来的代码,就能直接生成单个合并后的DataFrame。

方式2:收集子结果后合并

如果是循环处理每个子列表导致生成多个DataFrame,可先收集所有子结果,再合并:

import pandas as pd

# 假设原数据是多个子列表的集合
sub_lists = [
    [{'case_id': 22, 'case_subject': 'followup'}, {'case_id': 22, 'case_subject': 'rma'}, {'case_id': 22, 'case_subject': 'ticket'}, {'case_id': 22, 'case_subject': '61555'}],
    [{'case_id': 26, 'case_subject': 'c'}, {'case_id': 26, 'case_subject': 'ge'},{'case_id':26,'case_subject': 'app'}, {'case_id': 26, 'case_subject': 'logs'},{'case_id':26, 'case_subject': 'request'}],
    [{'case_id': 30, 'case_subject': 'refund'}, {'case_id': 30, 'case_subject': 'request'}, {'case_id': 30, 'case_subject': 'return'},{'case_id': 30, 'case_subject': 'refund'}, {'case_id': 30, 'case_subject': 'pending'}, {'case_id': 30, 'case_subject': 'partial'}, {'case_id': 30, 'case_subject': 'payment'}],
    [{'case_id': 34, 'case_subject': 'unable'}, {'case_id': 34, 'case_subject': 'control'},{'case_id': 34, 'case_subject': 'devices'}, {'case_id': 34, 'case_subject': 'via'}, {'case_id': 34, 'case_subject': 'mfg'}, {'case_id': 34, 'case_subject': 'configured'}, {'case_id': 34, 'case_subject': 'devices'}],
    [{'case_id': 38, 'case_subject': 'trouble'}, {'case_id': 38, 'case_subject': 'connecting'}, {'case_id': 38, 'case_subject': 'alexa'}]
]

result_dfs = []
for sub_list in sub_lists:
    df = pd.DataFrame(sub_list)
    out = df.assign(case_subject=df['case_subject'].str.split())\
            .explode('case_subject').value_counts()\
            .rename('Case_Subject_Split_Count').reset_index()
    result_dfs.append(out)

# 合并所有子DataFrame,生成最终结果
final_df = pd.concat(result_dfs, ignore_index=True)
print(final_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:48:11