如何根据字典键值对创建键重复对应值次数的DataFrame
Pandas按字典值重复键生成DataFrame实现方案
核心实现(高性能向量化方案)
直接使用Pandas内置的Index.repeat方法实现,无Python层循环,千万级数据量也能快速处理,代码如下:
import pandas as pd # 已有的date_dict字典 date_dict = {'20220107': 75910, '20220311': 145012, '20220318': 214286, '20220325': 283253, '20220401': 351874, '20220408': 419064, '20220415': 486172, '20220422': 553377, '20220429': 620635, '20220506': 684662, '20220513': 748368, '20220114': 823454, '20220520': 886719, '20220527': 949469, '20220121': 1023598, '20220128': 1096144, '20220204': 1167590, '20220211': 1238648, '20220218': 1310080, '20220225': 1380681, '20220304': 1450031} # 生成目标DataFrame df = pd.DataFrame({ 'date': pd.Index(date_dict.keys()).repeat(date_dict.values()) }).reset_index(drop=True)
逻辑说明
pd.Index(date_dict.keys())将字典的所有日期键转为Pandas索引对象- 调用
repeat方法时传入字典的所有值作为每个元素的重复次数,直接生成按要求重复的日期序列 - 末尾的
reset_index(drop=True)是可选操作,用于生成从0开始连续的行索引,不需要可以删掉
结果校验
可以用以下代码校验每个日期对应的行数是否和字典中定义的一致:
# 统计每个日期的出现次数 print(df['date'].value_counts().sort_index())
运行后输出的每个日期对应的计数和date_dict中的值完全匹配,即说明生成正确。
注意:不要用循环逐行append或者多层列表推导的方式实现,示例字典总数据量超过1500万行,循环写法的运行速度会比向量化方案慢几十倍,还可能占满内存。
内容的提问来源于stack exchange,提问作者allen56
相关产品推荐
相关产品推荐

