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

如何从Pandas分组后的DataFrame生成字典列表?

解决Pandas分组后生成字典列表列的问题

我明白你的需求啦——你已经按Year、Month、S_ID、Channel_Name、Interaction完成了分组,现在想把每组里的Doc_ID和Feed_ID转换成字典列表,而不是单纯的值列表对吧?其实只需要调整一下apply里的逻辑就可以轻松实现。

核心思路

你之前用x.values.tolist()得到的是二维值列表,我们可以利用Pandas的to_dict('records')方法,直接把每组的子DataFrame转换成字典列表——这个方法会把每行数据转成一个以列名为键的字典,完美匹配你想要的格式。

完整代码示例

首先构造你提供的示例DataFrame:

import pandas as pd

data = [
    [2018, 2, 67, 'WhiteCoats', 1, 152, 5776],
    [2018, 2, 67, 'WhiteCoats', 4, 152, 5776],
    [2018, 2, 67, 'WhiteCoats', 4, 152, 6046],
    [2018, 2, 67, 'Beats', 4, 152, 6117],
    [2018, 2, 84, 'Beats', 4, 27261, 6286],
    [2018, 2, 84, 'Beats', 1, 9887, 6286]
]
df = pd.DataFrame(data, columns=['Year', 'Month', 'S_ID', 'Channel_Name', 'Interaction', 'Doc_ID', 'Feed_ID'])

然后执行分组并生成字典列表的代码:

# 分组后对指定列处理,生成字典列表并重置索引
result_df = df.groupby(['Year', 'Month', 'S_ID', 'Channel_Name', 'Interaction'])[['Doc_ID', 'Feed_ID']].apply(lambda x: x.to_dict('records')).reset_index(name='Dictionary')

结果说明

运行后result_df的结构完全符合你的预期:

YearMonthS_IDChannel_NameInteractionDictionary
2018267WhiteCoats1[{'Doc_ID': 152, 'Feed_ID': 5776}]
2018267WhiteCoats4[{'Doc_ID': 152, 'Feed_ID': 5776}, {'Doc_ID': 152, 'Feed_ID': 6046}]
2018267Beats4[{'Doc_ID': 152, 'Feed_ID': 6117}]
2018284Beats1[{'Doc_ID': 9887, 'Feed_ID': 6286}]
2018284Beats4[{'Doc_ID': 27261, 'Feed_ID': 6286}]

注:你给出的期望结果中,WhiteCoats组Interaction=4只显示了一个字典,可能是笔误,上述代码会如实保留所有行对应的字典。

内容的提问来源于stack exchange,提问作者Sriram Arvind Lakshmanakumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:38:38