如何从Pandas DataFrame生成值为Series的嵌套字典并避免循环
高效实现方案
可以通过pandas内置的groupby分组逻辑结合字典推导式实现需求,不需要手动写双层循环做布尔筛选,性能远高于自定义循环方案,尤其适合数据量较大的场景。
实现代码
# 纯字典推导式实现,无自定义循环逻辑 nested_dict = { cat: { code: grp for (curr_cat, code), grp in df.set_index('Time').groupby(['Category', 'Code'])['Amount'] if curr_cat == cat } for cat in df['Category'].unique() }
如果你之前示例给出的期望结构要求外层分类对应的值是包裹内层字典的列表,只需要调整内层结构即可:
nested_dict = { cat: [{ code: grp for (curr_cat, code), grp in df.set_index('Time').groupby(['Category', 'Code'])['Amount'] if curr_cat == cat }] for cat in df['Category'].unique() }
说明
pandas的groupby逻辑为底层C实现,避免了Python层循环每次遍历全表做布尔匹配的开销,万行以上数据性能可以比原双层循环方案提升10~100倍。生成的内层Series默认以Time为索引、Amount为值,和你原代码输出结果完全一致。
内容的提问来源于stack exchange,提问作者stacksideways
相关产品推荐
相关产品推荐

