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

如何基于DataFrame映射替换嵌套列表中的指定元素?

问题描述

我有一个每个子列表包含8个元素的嵌套列表:

list_of_lists = [
[123456789, 0, 'Y', 'Hourly 30 brk', 'Fixed 4hrs HOL', 'Eastern', 'College Full Time Conf', 'Clock Employee'], 
[124356789, 0, 'Y', 'Hourly 30 brk HOL', 'Fixed 4hrs HOL no Winter Rec', 'Eastern', 'College Full Time Faculty 10mo', 'Hourly NonExempt Employee'], 
[987654321, 0, 'Y', 'Hourly 30 brk wknd', 'Fixed 54hrs HOL', 'Eastern', 'College Full Time Faculty 12mo', 'Salary Exempt Employee'], 
[456789123, 0, 'Y', 'Hourly 30 brk wknd HOL', 'Fixed 58hrs HOL', 'Eastern', 'College  Full Time Staff', 'Hourly Supervisor']
]

同时有一个存储标题与对应赋值的DataFrame:

0      1
0                   Hourly 30 brk  100.0
1               Hourly 30 brk HOL  101.0
2              Hourly 30 brk wknd  102.0
3          Hourly 30 brk wknd HOL  103.0
4               Salary 30 brk HOL  104.0
12                 Fixed 4hrs HOL  100.0
13   Fixed 4hrs HOL no Winter Rec  101.0
14                Fixed 54hrs HOL  102.0
15  Fixed 54hrs HOL no Winter Rec  103.0
16                Fixed 58hrs HOL  104.0
17  Fixed 58hrs HOL no Winter Rec  105.0
18                 Fixed 5hrs HOL  106.0
19   Fixed 5hrs HOL no Winter Rec  107.0
20                Fixed 75hrs HOL  108.0
21  Fixed 75hrs HOL no Winter Rec  109.0
22                 Fixed 8hrs HOL  110.0
23   Fixed 8hrs HOL no Winter Rec  111.0
24                        Eastern  100.0

我需要完成以下操作:

  • 遍历df的每一行,获取第一列的标题;
  • 在嵌套列表中查找该标题;
  • 用df中对应的第二列值替换找到的标题。

我已经通过以下代码确认能正确获取df第一列的取值:

for i in df[0]:
    print(i) # 确认能拿到要在嵌套列表中查找的值

但不知道怎么写替换逻辑,也不确定把df转成字典会不会更合适。预期输出如下:

list_of_lists = [
[123456789, 0, 'Y', '100', '100', '100', 'College Full Time Conf', 'Clock Employee'], 
[124356789, 0, 'Y', '101', '101', '100', 'College Full Time Faculty 10mo', 'Hourly NonExempt Employee'], 
[987654321, 0, 'Y', '102', '102', '100', 'College Full Time Faculty 12mo', 'Salary Exempt Employee'], 
[456789123, 0, 'Y', '103', '103', '100', 'College  Full Time Staff', 'Hourly Supervisor']
]
解决方案

把DataFrame转成字典是最高效的实现方式,字典的键值对查找时间复杂度为O(1),比逐行遍历df查找快得多。具体实现步骤如下:

  1. 将df转换为字典,键为df第一列的标题,值为对应第二列的数值(转为字符串以匹配预期输出格式)
  2. 遍历嵌套列表的每个子列表,检查每个元素:若元素存在于字典的键中,则替换为对应字典值;否则保留原元素

完整代码如下:

# 将DataFrame转为替换字典,键为第0列标题,值为第1列的字符串格式数值
replace_dict = df.set_index(0)[1].astype(str).to_dict()

# 遍历嵌套列表执行替换操作
for sub_list in list_of_lists:
    for idx, item in enumerate(sub_list):
        if item in replace_dict:
            sub_list[idx] = replace_dict[item]

关键步骤解释

  • df.set_index(0)[1]:将df的第0列设为索引,提取第1列的对应数据
  • .astype(str):将浮点型数值转为字符串,与预期输出中的字符串格式保持一致
  • .to_dict():将处理后的Series转换为字典,实现快速键值查找
  • enumerate(sub_list):同时获取元素的索引和值,方便直接修改原列表中的元素

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:40:34