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

如何连接两个Pandas DataFrame并生成对应描述列?

解决方案

可以通过构建ID-描述映射字典+循环插入列的方式高效实现需求,具体操作如下:

1. 构建ID到描述的映射字典

将df1转换为字典,利用字典O(1)的查找效率,比多次merge操作更高效:

import pandas as pd
from numpy import nan

# 初始化原始数据
df1 = pd.DataFrame({'ID': {0: 'A', 1: 'B', 2: 'C'}, 'Description': {0: 'Apple', 1: 'Book', 2: 'Cat'}})
df2 = pd.DataFrame({'Name': {0: 'David', 1: 'Ken'},'ID1': {0: 'A', 1: 'B'}, 'ID2': {0: 'C', 1: nan}, 'ID3': {0: 'B', 1: 'C'}})

# 生成ID到Description的映射字典
id_desc_map = df1.set_index('ID')['Description'].to_dict()

2. 循环处理生成并插入描述列

循环遍历ID1/ID2/ID3列,生成对应的描述列,并插入到对应ID列的后方,保证列顺序符合需求:

for i in range(1, 4):
    id_col = f'ID{i}'
    desc_col = f'DESC{i}'
    
    # 匹配描述,将NaN替换为'Null'(与期望结果一致)
    df2[desc_col] = df2[id_col].map(id_desc_map).fillna('Null')
    
    # 获取ID列的位置,将描述列插入到其下一位
    insert_index = df2.columns.get_loc(id_col) + 1
    df2.insert(insert_index, desc_col, df2.pop(desc_col))

最终输出结果

运行代码后,df2的输出与你的期望完全一致:

Name ID1  DESC1  ID2 DESC2 ID3  DESC3
0  David   A  Apple    C   Cat   B  Book
1    Ken   B   Book  NaN  Null   C    Cat

方案优势

  • 字典映射的查找效率远高于多次merge,数据量越大性能优势越明显
  • 仅循环3次,几乎无性能开销
  • 严格保证ID列与对应描述列的相邻顺序,完全匹配需求

内容的提问来源于stack exchange,提问作者Shichimi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:22:39