如何移除Pandas生成字典中的列名,实现列表型字典输出?
解决方案:将分组后的嵌套字典转为列表型字典
嘿,这个需求其实很好实现,给你两种简洁的方案,看哪种更适合你的场景:
方法一:直接针对目标列分组(最高效)
既然你只需要每个page_id对应的access_time列表,完全可以直接对access_time列做分组操作,一步到位,比操作整个DataFrame更高效:
import pandas as pd # 示例数据 data = { 'page_id': ['01', '01', '02', '03'], 'access_time': ['20171223', '20171224', '20171226', '20171227'] } df = pd.DataFrame(data) # 核心代码 result = df.groupby('page_id')['access_time'].apply(list).to_dict() print(result)
运行后得到的结果就是你想要的:
{'01': ['20171223', '20171224'], '02': ['20171226'], '03': ['20171227']}
方法二:基于你原有代码修改
如果你不想改动太多原有逻辑,也可以在生成嵌套字典后,用字典推导式提取出access_time列表:
# 你的原有代码生成嵌套字典 nested_result = df.groupby('page_id').apply(lambda dfg: dfg.drop('page_id', axis=1).to_dict(orient='list')).to_dict() # 转换为目标格式 final_result = {page_id: info['access_time'] for page_id, info in nested_result.items()} print(final_result)
为什么原有代码会生成嵌套字典?
你原来的to_dict(orient='list')会把DataFrame的每一列转成列表并以列名为键,所以即使你drop了page_id,剩下的access_time列依然会作为外层字典值的键,导致出现嵌套结构。而方法一中直接对单列分组后转列表,就跳过了列名这一层,直接得到page_id对应时间列表的结构。
内容的提问来源于stack exchange,提问作者sqya
相关产品推荐
相关产品推荐

