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

Pandas DataFrame含不等长列表单元格拆分多行无重复方案问询

Pandas多列不等长列表拆分无重复方案

问题原因

多次单独调用explode拆分不同列时,会生成多列列表的笛卡尔积,最终行数等于该行所有列表长度的乘积,因此产生大量重复数据。

解决代码

import pandas as pd

df = pd.DataFrame(
{'C1': [["A","B"], ["C"], ["D","E"], ["F"]],
 'C2': [[1], [2], [3], [4]],
 'C3': ['s1', 's2', 's3', 's4'],
 'C4': [123, 321, [777,111], 145]})

def align_row_length(row):
    # 计算当前行所有列表的最大长度
    max_len = max(len(v) if isinstance(v, list) else 1 for v in row)
    aligned = {}
    for col, val in row.items():
        if isinstance(val, list):
            # 长度不足的列表自动补全到最大长度
            aligned[col] = val + [val[-1]] * (max_len - len(val))
        else:
            # 标量重复max_len次
            aligned[col] = [val] * max_len
    return pd.Series(aligned)

# 对齐行内列表长度后一次性拆分所有列
result = df.apply(align_row_length, axis=1).explode(df.columns.tolist()).reset_index(drop=True)
print(result)

输出结果

C1 C2  C3   C4
0  A  1  s1  123
1  B  1  s1  123
2  C  2  s2  321
3  D  3  s3  777
4  E  3  s3  111
5  F  4  s4  145

该方案会按每行最长列表的长度拆分,各列列表元素按位置一一对应,不会生成额外的笛卡尔积重复行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:06:04