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

将Pandas中二维数组列拆分为独立列的实现方法

解决方案

首先你需要先把数据按原始行分组(你给出的x是所有子列表的扁平集合,得先还原成每行对应的二维数组列表),再将每行的二维列表转换成行数据,最终合并成目标宽表。

步骤1:还原原始分组数据

因为x是按原始行顺序排列的,直接分成3组对应原始的3行即可:

import pandas as pd

x = [["AA", 2], ["AB", 1], ["AC", 1], ["AA", 3], ["AC", 2], ["AE", 1], ["AB", 2], ["AC", 1], ["AD", 1]]
# 拆分出原始的3行数据
grouped_x = [x[:3], x[3:6], x[6:]]

步骤2:转换为目标DataFrame

方法一:遍历构造字典(直观易懂)

rows = []
for group in grouped_x:
    # 将每组二维列表转为键值对字典
    row_dict = {item[0]: item[1] for item in group}
    rows.append(row_dict)

# 生成DataFrame,缺失值填充为0并转为整数类型
result_df = pd.DataFrame(rows).fillna(0).astype(int)

方法二:用pd.json_normalize(简洁高效)

# 先把每组转成字典,再用json_normalize直接生成结构
result_df = pd.json_normalize([dict(group) for group in grouped_x]).fillna(0).astype(int)

如果已有原始DataFrame(每行存二维列表)

假设你已经有一个存储原始数据的DataFrame:

df_raw = pd.DataFrame({
    'data': [
        [["AA", 2], ["AB", 1], ["AC", 1]],
        [["AA", 3], ["AC", 2], ["AE", 1]],
        [["AB", 2], ["AC", 1], ["AD", 1]]
    ]
})

直接处理data列即可:

result_df = df_raw['data'].apply(lambda lst: pd.Series(dict(lst))).fillna(0).astype(int)

执行后得到的result_df就是你要的结构:

AA  AB  AC  AD  AE
0   2   1   1   0   0
1   3   0   2   0   1
2   0   2   1   1   0

你的当前代码问题说明

你现在的代码是把x里的每个子列表(比如["AA",2])单独作为一行,生成的是两列的DataFrame,这和目标的“一行多列”结构完全不符。我们需要的是把每组子列表转换成同一行的多列数据,而非多行两列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 11:22:23