如何用Pandas.groupby()构建含多列值的字典?
用Pandas的.groupby()构建多值字典的解决方案
嘿,我完全懂你遇到的困扰——当你尝试用groupby处理多列来构建字典时,结果不是预期的元组列表,反而带着列名结构对吧?别慌,这有两种简洁的方法能实现你想要的效果:以Col1的值为键,对应每组的Col2和Col3打包成元组并组成列表作为值。
首先,先拿一个示例数据来演示:
import pandas as pd # 示例DataFrame df = pd.DataFrame({ 'Col1': ['A', 'A', 'B', 'B', 'B'], 'Col2': [1, 2, 3, 4, 5], 'Col3': ['x', 'y', 'z', 'w', 'v'] })
方法1:用zip直接打包列(最直观)
这种方法利用zip把每组的Col2和Col3对应元素打包成元组,再转成列表,最后转成字典:
result_dict = df.groupby('Col1').apply( lambda group: list(zip(group['Col2'], group['Col3'])) ).to_dict()
方法2:用itertuples转换行成元组
如果你更习惯用行级别的转换,可以用itertuples把每组的每一行转成无索引的元组,再组成列表:
result_dict = df.groupby('Col1')[['Col2', 'Col3']].apply( lambda group: list(group.itertuples(index=False, name=None)) ).to_dict()
最终输出结果
两种方法都会得到你想要的字典结构:
{'A': [(1, 'x'), (2, 'y')], 'B': [(3, 'z'), (4, 'w'), (5, 'v')]}
为什么之前的方法不行?
如果你直接用df.groupby('Col1')[['Col2','Col3']].to_dict(),Pandas会默认生成嵌套字典(列名作为第二层键),这是因为它没有把多列的值打包成元组的逻辑。而上面的两种方法通过apply对每组数据做了自定义处理,把行数据转换成了元组列表,正好符合你的需求。
内容的提问来源于stack exchange,提问作者Micks Ketches
相关产品推荐
相关产品推荐

