基于条件与变量实现Pandas值向另一DataFrame的映射(Python Pandas)
用位置矩阵实现DataFrame数据转置映射
场景说明
- 结果DataFrame:空结构,列名涵盖
1至12,共12列 - 源DataFrame:包含待映射的业务数据,以及一列指定目标列位置的字段(例如命名为
target_col,值为1-12的整数,对应结果DF的列名)
实现方案
1. 构造示例测试数据
先模拟两个DataFrame的结构,方便验证效果:
import pandas as pd # 源DF:包含待映射数据和目标列标识 source_df = pd.DataFrame({ 'data': [10, 20, 30, 40], 'target_col': [3, 7, 1, 12] # 对应结果DF的第3、7、1、12列 }) # 空结果DF:列名设为1-12的字符串形式 result_df = pd.DataFrame(columns=[str(i) for i in range(1, 13)])
2. 两种映射实现方式
方式一:批量高效映射(推荐)
利用pivot将源DF转为宽表,再通过列名对齐匹配结果DF的结构,适合大数据量场景:
# 转换为宽表,列对应target_col的值 mapped_wide = source_df.pivot(columns='target_col', values='data') # 将列名转为字符串,对齐结果DF的列名 mapped_wide.columns = mapped_wide.columns.astype(str) # 合并到结果DF,缺失列自动填充NaN result_df = pd.concat([result_df, mapped_wide], ignore_index=True)
方式二:逐行赋值(小数据量适用)
通过遍历源DF的每一行,根据target_col定位结果DF的列并赋值:
for idx, row in source_df.iterrows(): target_col_name = str(row['target_col']) result_df.loc[idx, target_col_name] = row['data']
3. 最终效果
处理完成后,result_df会将源DF中的data值精准放入target_col指定的列位置,未匹配的列保持空值(NaN)。
内容的提问来源于stack exchange,提问作者Ryan Leonard
相关产品推荐
相关产品推荐

