如何将Pandas DataFrame转换为指定格式的字典?
解决方案:将DataFrame转换为指定嵌套字典格式
这里有个可行的方案来实现你想要的结果,咱们一步步拆解实现逻辑:
步骤1:拆分标签并展开行
首先需要把每个tags_string里的逗号分隔标签拆成单独的条目,这样才能统计每个标签的出现次数。我们可以用assign创建新的标签列表列,再用explode把列表展开成多行:
df_exploded = df.assign(tags=df['tags_string'].str.split(',')).explode('tags')
这一步之后,df_exploded的结构会变成:
site_category tags_string tags 0 26 aaa,bbb,ccc aaa 0 26 aaa,bbb,ccc bbb 0 26 aaa,bbb,ccc ccc 1 43 ddd,eee,fff ddd 1 43 ddd,eee,fff eee 1 43 ddd,eee,fff fff 2 26 aaa,hhh,iii aaa 2 26 aaa,hhh,iii hhh 2 26 aaa,hhh,iii iii
步骤2:分组统计标签次数
接下来按site_category和tags分组,统计每个标签在对应分类下的出现次数,再转换成字典格式:
tag_counts = df_exploded.groupby(['site_category', 'tags']).size().unstack(fill_value=0).to_dict('index')
这一步会得到一个以分类为键,标签计数字典为值的字典:
{'26': {'aaa': 2, 'bbb': 1, 'ccc': 1, 'hhh': 1, 'iii': 1}, '43': {'ddd': 1, 'eee': 1, 'fff': 1}}
步骤3:转换为目标嵌套格式
最后把上面的结果转换成你需要的「列表包含大字典,每个分类对应一个包含计数字典的列表」格式:
tags_string_list = [dict(item for sublist in [{k: [v]} for k, v in tag_counts.items()] for item in sublist.items())]
完整代码
把所有步骤整合起来,完整代码如下:
import pandas as pd # 原始数据 data = {'articles': [{'site_category': '26','tags_string': 'aaa,bbb,ccc'}, {'site_category': '43','tags_string': 'ddd,eee,fff'}, {'site_category': '26','tags_string': 'aaa,hhh,iii'}]} df = pd.json_normalize(data, 'articles') # 拆分标签并展开 df_exploded = df.assign(tags=df['tags_string'].str.split(',')).explode('tags') # 分组统计标签次数 tag_counts = df_exploded.groupby(['site_category', 'tags']).size().unstack(fill_value=0).to_dict('index') # 转换为目标格式 tags_string_list = [dict(item for sublist in [{k: [v]} for k, v in tag_counts.items()] for item in sublist.items())] print(tags_string_list)
运行后输出结果:
[{"26": [{"aaa": 2, "bbb": 1, "ccc": 1, "hhh": 1, "iii": 1}], "43": [{"ddd": 1, "eee": 1, "fff": 1}]}]
内容的提问来源于stack exchange,提问作者tientoen
相关产品推荐
相关产品推荐

