如何从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的结构完全符合你的预期:
| Year | Month | S_ID | Channel_Name | Interaction | Dictionary |
|---|---|---|---|---|---|
| 2018 | 2 | 67 | WhiteCoats | 1 | [{'Doc_ID': 152, 'Feed_ID': 5776}] |
| 2018 | 2 | 67 | WhiteCoats | 4 | [{'Doc_ID': 152, 'Feed_ID': 5776}, {'Doc_ID': 152, 'Feed_ID': 6046}] |
| 2018 | 2 | 67 | Beats | 4 | [{'Doc_ID': 152, 'Feed_ID': 6117}] |
| 2018 | 2 | 84 | Beats | 1 | [{'Doc_ID': 9887, 'Feed_ID': 6286}] |
| 2018 | 2 | 84 | Beats | 4 | [{'Doc_ID': 27261, 'Feed_ID': 6286}] |
注:你给出的期望结果中,WhiteCoats组Interaction=4只显示了一个字典,可能是笔误,上述代码会如实保留所有行对应的字典。
内容的提问来源于stack exchange,提问作者Sriram Arvind Lakshmanakumar
相关产品推荐
相关产品推荐

