You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于条件与变量实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 05:09:10