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

如何展开Pandas DataFrame中长度不一致的多列表列?

解决多列列表长度不一致时的DataFrame展开问题

当尝试同时展开包含长度不一致列表的多列时,explode会因元素数量不匹配报错。解决思路是先将每行的所有列表补全到该行的最大长度,用NaN填充缺失值,再执行explode操作。

步骤1:定义补全列表的函数

import pandas as pd
import numpy as np

def pad_list(lst, target_length):
    # 将列表补全到目标长度,不足部分用NaN填充
    return lst + [np.nan] * (target_length - len(lst))

步骤2:处理原始DataFrame

# 原始数据
df = pd.DataFrame({'Name': ['Name1','Name2'], 
                    'Time': [[0.0, 5.0, 10.0, 15.0],[0.0, 4.0, 28.0, 48.0]],
                    'Values': [[0.0, 5.0, 10.0],[0.0, 4.0, 48.0]]})

# 计算每行中列表的最大长度
df['max_length'] = df.apply(lambda row: max(len(row['Time']), len(row['Values'])), axis=1)

# 补全Time和Values列的列表到最大长度
df['Time'] = df.apply(lambda row: pad_list(row['Time'], row['max_length']), axis=1)
df['Values'] = df.apply(lambda row: pad_list(row['Values'], row['max_length']), axis=1)

步骤3:执行展开操作

# 展开并删除辅助列
df2 = df.explode(['Time', 'Values']).drop('max_length', axis=1)

# 重置索引(可选,让索引连续)
df2 = df2.reset_index(drop=True)

最终输出

Name   Time  Values
0  Name1   0.0     0.0
1  Name1   5.0     5.0
2  Name1  10.0    10.0
3  Name1  15.0     NaN
4  Name2   0.0     0.0
5  Name2   4.0     4.0
6  Name2  28.0    48.0
7  Name2  48.0     NaN

注:你提供的期望输出中部分数值与原始数据不符(比如Name1的Values出现了Name2的Time值),上述结果是基于原始数据的正确展开结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 08:47:18