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

在已有DataFrame中展开Numpy数组为独立列

将DataFrame中的数组列转换为对应多列

需求说明

现有一个包含col 1、col 2、keys、values列的DataFrame,其中keys和values均为NumPy数组类型:

  • 每行的keys内容完全相同
  • 每行的values是对应keys的取值集合

需要将keys中的元素作为新列名,把values的对应值填充到新列中,且直接在原DataFrame上扩展(不新建对象)。

解决方法

方法一:批量转换数组列(高效推荐)

利用pd.DataFrame直接将values列的数组批量转为结构化列,再与原表拼接:

import pandas as pd
import numpy as np

# 构造源DataFrame
source_df = pd.DataFrame(
    [
        ['data', 'data', np.array(['key1', 'key2']), np.array(['value1a', 'value2a'])],
        ['data', 'data', np.array(['key1', 'key2']), np.array(['value1b', 'value2b'])]
    ],
    columns=['col 1', 'col 2', 'keys', 'values']
)

# 提取统一的keys作为新列名,将values列转为DataFrame
new_columns = pd.DataFrame(source_df['values'].tolist(), columns=source_df['keys'].iloc[0])

# 拼接原表(删除keys/values列)与新列,覆盖原DataFrame
source_df = pd.concat([source_df.drop(['keys', 'values'], axis=1), new_columns], axis=1)

方法二:逐行转换(灵活适配)

通过apply逐行将values数组转为Series,指定索引为对应行的keys:

# 同样基于上述source_df
source_df = pd.concat([
    source_df.drop(['keys', 'values'], axis=1),
    source_df.apply(lambda row: pd.Series(row['values'], index=row['keys']), axis=1)
], axis=1)

验证结果

执行上述代码后,source_df的结构和值将与目标goal_df完全一致:

col 1  col 2    key1    key2
0   data   data  value1a  value2a
1   data   data  value1b  value2b

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 12:03:27