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

如何匹配等长嵌套列表并关联ID转换为Pandas DataFrame

问题描述

现有两个嵌套列表Reason_lst和TestDate_lst,二者对应位置的子列表元素数量完全一致,另有一个ID列表。需要将三者匹配,让每个Reason对应同位置的TestDate,同时关联对应的ID,生成指定格式的DataFrame。

尝试用.explode方法处理时,出现了Reason和TestDate不匹配的问题,寻求解决办法。

预期输出示例:

IDs            Reason              TestDate
1234           Too Cool            2022-03-24
1234           Too Sad             2022-03-24
1234           Too Scared          2022-03-24
1235           Too Scary           2022-07-05
1236           Too Wonderful       2016-08-26

示例数据:

TestDate_lst = [['2022-03-24', '2022-03-24', '2022-03-24'],
 ['2022-07-05'],
 ['2016-08-26'],
 ['2016-05-06'],
 ['2020-09-29', '2020-04-14'],
 ['2016-07-25', '2021-12-29'],
 ['2020-01-03'],
 ['2022-07-13',
  '2022-07-13',
  '2022-07-13',
  '2022-07-13',
  '2022-07-13',
  '2022-07-13'],
 ['2019-07-23'], ....]

Reason_lst = [['Too cool', 'Too sad', 'Too scared'],
 ['Too scary'],
 ['Too mean'],
 ['Too sarcastic'],
 ['Too happy'],
 ['Too angry'],
 ['Too loud'],
 ['Too upset',
  'Too crazy',
  'Too insane',
  'Too free',
  'Too fake'],
 ['Too loud'], ....]

IDs = ['1234', '1235', '1236', '1237', .....]
解决方案

单独对Reason和TestDate列使用explode会导致匹配错位,因为explode是独立处理每一列的展开逻辑。要确保Reason和TestDate严格对应,可采用以下两种方法:

方法一:多列同步explode

直接构造原始DataFrame后,同时对Reason和TestDate列执行explode操作,Pandas会保证同一行的子列表同步展开:

import pandas as pd

# 构造初始DataFrame
df = pd.DataFrame({
    'IDs': IDs,
    'Reason': Reason_lst,
    'TestDate': TestDate_lst
})

# 同步展开目标列,重置索引
result_df = df.explode(['Reason', 'TestDate'], ignore_index=True)

# 输出结果
print(result_df)

方法二:手动构造扁平化数据

如果对explode的同步逻辑存疑,可手动遍历三个列表,直接生成扁平化的记录列表,再转为DataFrame:

import pandas as pd

flat_records = []
for idx, id_val in enumerate(IDs):
    # 获取当前ID对应的Reason和TestDate子列表
    current_reasons = Reason_lst[idx]
    current_dates = TestDate_lst[idx]
    # 配对每个Reason和对应位置的TestDate
    for reason, date in zip(current_reasons, current_dates):
        flat_records.append({
            'IDs': id_val,
            'Reason': reason,
            'TestDate': date
        })

# 转为DataFrame
result_df = pd.DataFrame(flat_records)
print(result_df)

两种方法都能保证Reason与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 21:10:20