如何将基金NAV数据从长表转宽表并填充至新Pandas DataFrame?
嘿,你已经搭好空的宽格式DataFrame框架了,接下来填充数据不用手动循环一个个搞,用Pandas的内置方法就能高效搞定:
方法一:直接从原数据生成宽表再补全日期序列
其实你可以跳过先创建空DataFrame的步骤,直接把原长格式数据转成宽格式,再扩展到完整日期范围,流程更简洁:
# 第一步:确保原数据的date列是datetime类型,避免索引匹配出错 df['date'] = pd.to_datetime(df['date']) # 第二步:将原数据转成宽格式(日期为索引,基金代码为列) wide_format_df = df.pivot( index='date', columns='fund code', values='NAV' ) # 第三步:扩展到你需要的完整日期序列,缺失值自动用NaN填充 days = pd.date_range(df['date'].min(), df['date'].max(), freq='D') final_df = wide_format_df.reindex(days)
方法二:填充你已创建的Newdf
如果你想基于已经建好的Newdf来填充,也可以这么操作:
# 先统一日期类型,确保索引匹配 df['date'] = pd.to_datetime(df['date']) # 把原数据设置为(date, fund code)的多级索引,方便精准定位NAV值 df_multi_index = df.set_index(['date', 'fund code'])['NAV'] # 将多级索引数据展开为宽格式,再匹配Newdf的日期索引完成填充 Newdf = df_multi_index.unstack().reindex(Newdf.index)
逻辑说明
set_index(['date', 'fund code'])让每一个NAV值都绑定到「日期+基金」的唯一位置上unstack()把复合索引转成你需要的宽格式结构(日期为行,基金为列)reindex(Newdf.index)把数据扩展到你之前定义的完整日期序列,缺失的日期/基金对应的位置会自动填充NaN,正好对应你示例里的...
这样处理后,你的Newdf就会完全符合预期:每一行是日期,每一列是基金,对应单元格填充好NAV数据。
内容的提问来源于stack exchange,提问作者idleriver
相关产品推荐
相关产品推荐

