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

如何实现DataFrame中多值列表到单值的映射并重复对应值

展开嵌套列表生成DataFrame的实现方法

核心思路

要实现将嵌套的Reason_lst展开,同时让对应的ID和TestDate重复匹配,本质是根据每个子列表的长度,重复对应的ID和日期值,再和展开后的Reason元素一一对应。

方法一:列表推导式(简洁直观)

先构造三个展开后的平级列表,再传入pandas生成DataFrame:

import pandas as pd

# 示例数据
ID_lst = [1, 2, 3]
Reason_lst = [["超时", "错误"], ["中断"], ["异常", "未响应"]]
TestDate_lst = ["2024-05-01", "2024-05-02", "2024-05-03"]

# 构造展开后的列表
expanded_ids = [id for id, reasons in zip(ID_lst, Reason_lst) for _ in reasons]
expanded_dates = [date for date, reasons in zip(TestDate_lst, Reason_lst) for _ in reasons]
expanded_reasons = [reason for reasons in Reason_lst for reason in reasons]

# 生成DataFrame
df = pd.DataFrame({
    "ID": expanded_ids,
    "TestDate": expanded_dates,
    "Reason": expanded_reasons
})

print(df)

输出结果:

ID    TestDate Reason
0   1  2024-05-01     超时
1   1  2024-05-01     错误
2   2  2024-05-02     中断
3   3  2024-05-03     异常
4   3  2024-05-03   未响应

方法二:结合map函数实现(满足你的需求)

如果想用map函数,可以借助itertools.repeat来生成重复的ID和日期,再扁平化处理:

import pandas as pd
import itertools

# 示例数据同上
ID_lst = [1, 2, 3]
Reason_lst = [["超时", "错误"], ["中断"], ["异常", "未响应"]]
TestDate_lst = ["2024-05-01", "2024-05-02", "2024-05-03"]

# 用map生成重复的ID迭代器
id_repeat = map(lambda x: itertools.repeat(x[0], len(x[1])), zip(ID_lst, Reason_lst))
# 扁平化迭代器得到展开的ID列表
expanded_ids = list(itertools.chain.from_iterable(id_repeat))

# 同理处理TestDate
date_repeat = map(lambda x: itertools.repeat(x[0], len(x[1])), zip(TestDate_lst, Reason_lst))
expanded_dates = list(itertools.chain.from_iterable(date_repeat))

# 展开Reason列表
expanded_reasons = list(itertools.chain.from_iterable(Reason_lst))

# 生成DataFrame
df = pd.DataFrame({
    "ID": expanded_ids,
    "TestDate": expanded_dates,
    "Reason": expanded_reasons
})

print(df)

方法三:利用pandas的explode方法(更高效)

如果先构造包含嵌套列表的DataFrame,再用explode直接展开:

import pandas as pd

# 示例数据同上
ID_lst = [1, 2, 3]
Reason_lst = [["超时", "错误"], ["中断"], ["异常", "未响应"]]
TestDate_lst = ["2024-05-01", "2024-05-02", "2024-05-03"]

# 先构造带嵌套列的DataFrame
df = pd.DataFrame({
    "ID": ID_lst,
    "TestDate": TestDate_lst,
    "Reason": Reason_lst
})

# 展开Reason列
df = df.explode("Reason", ignore_index=True)

print(df)

这种方法最简洁,pandas会自动处理ID和TestDate的重复匹配,适合大数据量场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:45:34