将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
相关产品推荐
相关产品推荐

