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

如何利用XML信息关联现有DataFrame生成新DataFrame?

问题描述

现有DataFrame df1 结构如下:

txnID   date        repID
1   1001    8/5/2020    203
2   1002    6/28/2020   887
3   1003    6/28/2020   887
4   1004    4/16/2020   887
5   1005    6/14/2020   887
6   1006    5/19/2020   332
7   1019    9/23/2020   100
8   1027    12/4/2020   221

另有一份存储销售代表信息的XML文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<salesteam>
  <rep rID="r100">
    <firstName>Helmut</firstName>
    <lastName>Schwab</lastName>
    <territory>EMEA</territory>
  </rep>
  <rep rID="r887">
    <firstName>Walison</firstName>
    <lastName>da Silva</lastName>
    <territory>South America</territory>
  </rep>
  <rep rID="r332">
    <firstName>Lynette</firstName>
    <lastName>McRowe</lastName>
    <territory>East</territory>
  </rep>
  <rep rID="r203">
    <firstName>Aneeta</firstName>
    <lastName>Kappoorthy</lastName>
    <territory>West</territory>
  </rep>
  <rep rID="r221">
    <firstName>Veronika</firstName>
    <lastName>Sixt</lastName>
    <territory>EMEA</territory>
  </rep>
</salesteam>

需要根据XML中repID与lastName的对应关系,将lastName字段匹配至df1,生成包含原交易数据的新DataFrame df3,目标结构如下:

head(df3)
    txnID   date        repID   lastName
1   1001    8/5/2020    203     Kappoorthy
2   1002    6/28/2020   887     da Silva
3   1003    6/28/2020   887     da Silva
4   1004    4/16/2020   887     da Silva
5   1005    6/14/2020   887     da Silva
6   1006    5/19/2020   332     McRowe
7   1019    9/23/2020   100     Schwab
8   1027    12/4/2020   221     Sixt
解决方法

步骤1:解析XML文件,构建repID到lastName的映射字典

用Python标准库xml.etree.ElementTree解析XML,提取每个销售代表的ID(去掉前缀r)和对应的姓氏:

import xml.etree.ElementTree as ET
import pandas as pd

# 解析XML文件,替换为你的实际文件路径
tree = ET.parse('sales_reps.xml')
root = tree.getroot()

# 构建映射字典
rep_lastname_map = {}
for rep in root.findall('rep'):
    # 去掉rID属性的前缀'r',和df1的repID格式统一
    rep_id = rep.attrib['rID'].lstrip('r')
    last_name = rep.find('lastName').text
    rep_lastname_map[rep_id] = last_name

步骤2:为df1添加lastName列

将df1的repID转为字符串后,用map方法匹配姓氏,生成目标df3:

# 确保repID是字符串类型,和映射字典的键格式一致
df1['repID'] = df1['repID'].astype(str)
# 添加lastName列
df1['lastName'] = df1['repID'].map(rep_lastname_map)
# 生成df3
df3 = df1.copy()

# 查看结果
print(df3)

运行后得到的df3就会完全符合目标结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 04:05:19