不同大小Pandas DataFrame合并及用小表填充NaN值方案咨询
实现代码
import pandas as pd # 方案1:兼容性更高,无需高版本pandas支持 # 把df2的单行数据批量填充到df1的所有行 merged_part = df1.assign(**df2.iloc[0].to_dict()) # 统一将所有行的索引替换为df2的日期 merged_part.index = [df2.index[0]] * len(merged_part) # 拼接原始df2行,得到最终4行结果 res = pd.concat([merged_part, df2], axis=0) # 可选:调整列顺序匹配你期望的输出格式 res = res[['x', 'y', 'z', 'symbol', 'symbol', 'value1', 'value2', 'Occurance']]
替代方案(pandas 1.2.0+ 支持)
# 用交叉合并生成笛卡尔积,自动完成df2单行数据的批量填充 merged_part = df2.merge(df1, on='symbol', how='cross') merged_part.index = [df2.index[0]] * len(merged_part) res = pd.concat([merged_part, df2], axis=0)
说明
两种方案都没有用到循环,完全基于pandas内置方法实现:
- 批量填充逻辑靠pandas的广播特性自动完成,不需要逐行赋值
- 统一修改索引即可实现所有行的日期替换为df2的日期
- 最后拼接原始df2行,自然保留df1字段为空的最后一行,完全匹配期望的输出结构
内容的提问来源于stack exchange,提问作者ragendthsfdc pk
相关产品推荐
相关产品推荐

