如何将Pandas分组结果转换为指定格式的字典列表?
解决方法
方法一:透视表 + 转字典列表
这是最简洁高效的实现方式,先通过透视表将长格式数据转为宽格式,再直接转换为目标结构:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'Date': ['1.1', '1.1', '1.1', '2.1', '2.1', '2.1', '3.1', '3.1', '3.1'], 'Column1': ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'], 'Column2': [1, 3, 4, 2, 3, 5, 1, 2, 2] }) # 1. 透视表转换为宽格式,将Column1转为列、Column2为对应值 pivot_df = df.pivot(index='Date', columns='Column1', values='Column2').reset_index() # 2. 直接转为目标字典列表 result = pivot_df.to_dict('records') print(result)
输出结果完全匹配需求:
[ {"Date": "1.1", "A": 1, "B": 3, "C": 4}, {"Date": "2.1", "A": 2, "B": 3, "C": 5}, {"Date": "3.1", "A": 1, "B": 2, "C": 2} ]
方法二:改进GroupBy的Apply逻辑
如果坚持用GroupBy实现,可以在Apply中直接获取分组的name(即Date值),再将其与生成的键值对字典合并:
result = df.groupby('Date').apply( lambda g: {'Date': g.name, **dict(zip(g['Column1'], g['Column2']))} ).tolist()
这里用**解包操作符合并两个字典,既保留了Date字段,又保持了代码的紧凑性。
原代码问题说明
你之前的代码只处理了分组内的Column1和Column2,没有将分组的键(Date)加入结果字典,所以最终缺失了Date字段。上面两种方法都补上了这个关键环节。
内容的提问来源于stack exchange,提问作者Medanko
相关产品推荐
相关产品推荐

