将不同长度DataFrame组成的字典合并为单表并补零对齐维度的实现问题
实现方法
你之前的写法没有把每个子DataFrame里的日期和数值做对应映射,直接把整个DataFrame作为字典值传入,才会出现格式不符的问题。按以下步骤实现即可:
- 先把字典中每个子DataFrame处理成以日期为索引、数值为值的Series,保证日期和数值的对应关系
- 合并所有Series,按日期自动对齐,缺失值补0后转置,即可得到目标格式的DataFrame
示例代码
import pandas as pd # 处理每个子DataFrame series_list = [] for df in my_dict.values(): # 转换yr_mo为日期格式避免对齐错误,设为索引后取数值列 s = df.assign(yr_mo=pd.to_datetime(df["yr_mo"])).set_index("yr_mo")["number"] series_list.append(s) # 合并对齐日期,补零后转置得到目标格式 result_df = pd.concat(series_list, axis=1).sort_index().fillna(0).T # 如果需要重置行索引为0、1、2...的格式,加上下面这行即可 result_df = result_df.reset_index(drop=True)
代码说明
pd.concat(series_list, axis=1):将所有时间序列按日期索引对齐合并,列对应每一条原始时间序列,索引对应所有出现过的日期sort_index():保证日期列按时间升序排列,和你给出的目标格式一致fillna(0):将较短时间序列缺失的日期值统一补零.T转置后,行对应每一条原始时间序列,列对应所有日期,符合你的输出要求- 如果不需要保留原始时间序列的key作为索引,加
reset_index(drop=True)即可得到行索引为0开始的连续数字的格式
内容的提问来源于stack exchange,提问作者Cybernetic
相关产品推荐
相关产品推荐

