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

如何使用Pandas展开长度不同的两列列表数据

更简洁的统一解决方案

不需要拆分不同长度的行分别处理,可以通过对每一行根据列表长度选择配对方式,一次性生成目标结果:

import pandas as pd
from itertools import product

def expand_row(row):
    b_items = row['B']
    c_items = row['C']
    # 列表长度相同时用zip一一配对,不同时用笛卡尔积全配对
    if len(b_items) == len(c_items):
        pairs = list(zip(b_items, c_items))
    else:
        pairs = list(product(b_items, c_items))
    # 构造当前行的展开结果,添加A列
    return pd.DataFrame(pairs, columns=['B', 'C']).assign(A=row['A'])

# 构造原始DataFrame
df = pd.DataFrame(
    {'A': ['x1','x2','x3', 'x4'], 
     'B':[['v1','v2'],['v3','v4'],['v6'],['v7','v8']], 
     'C':[['c1','c2'],['c3','c4'],['c5','c6'],['c7']]}
)

# 展开所有行并合并结果
df_exploded = pd.concat([expand_row(row) for _, row in df.iterrows()], ignore_index=True)
# 调整列顺序为A、B、C
df_exploded = df_exploded[['A', 'B', 'C']]

运行后得到的结果和目标完全一致:

A   B   C
0  x1  v1  c1
1  x1  v2  c2
2  x2  v3  c3
3  x2  v4  c4
4  x3  v6  c5
5  x3  v6  c6
6  x4  v7  c7
7  x4  v8  c7

方案优势

  • 逻辑统一:不需要拆分DataFrame,用一个函数处理所有行的情况
  • 代码简洁:仅需少量代码完成需求,可读性强
  • 扩展性好:如果后续新增类似的列表列,只需修改函数中的配对逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:05:23