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

在Pandas DataFrame中将一维数组列转换为二维数组列的长度

问题描述

现有一个带一维数组列(1d_col)和二维数组列(2d_col)的Pandas DataFrame,输入数据如下:

1d_col2d_col
["negative", "positive"][["zero", ""], ["one", ""]]
["positive", "negative"][["two", ""], ["zero", ""]]
["negative"][["minus", ""]]
["positive"][["three", ""]]

需要把1d_col转成和2d_col结构匹配的new_col,最终输出的DataFrame要长成这样:

2d_colnew_col
[["zero", ""], ["one", ""]][["negative", "negative"], ["positive", "positive"]]
[["two", ""], ["zero", ""]][["positive", "positive"], ["negative", "negative"]]
[["minus", ""]][["negative", "negative"]]
[["three", ""]][["positive", "positive"]]
解决方案

咱们可以用apply加列表推导式搞定这个需求,核心逻辑很简单:

  • 对每一行,先拿到2d_col里每个子数组的长度
  • 把1d_col里的对应元素重复子数组长度的次数,拼成新的子数组
  • 最后把这些新子数组组合成和2d_col结构一致的new_col

代码实现

import pandas as pd

# 先搭好输入的DataFrame
df = pd.DataFrame({
    '1d_col': [
        ["negative", "positive"],
        ["positive", "negative"],
        ["negative"],
        ["positive"]
    ],
    '2d_col': [
        [["zero", ""], ["one", ""]],
        [["two", ""], ["zero", ""]],
        [["minus", ""]],
        [["three", ""]]
    ]
})

# 写个处理每一行的函数
def process_row(row):
    # 先算出2d_col里每个子数组的长度
    sub_arr_lengths = [len(sub) for sub in row['2d_col']]
    # 把1d_col的元素对应重复,生成new_col的结构
    new_col = [[val]*length for val, length in zip(row['1d_col'], sub_arr_lengths)]
    return new_col

# 把函数应用到每一行,生成new_col
df['new_col'] = df.apply(process_row, axis=1)

# 只保留需要的两列,得到结果
result_df = df[['2d_col', 'new_col']]
print(result_df)

代码说明

  1. 构建输入数据:按照示例创建对应的Pandas DataFrame。
  2. 行处理函数process_row:
    • 遍历当前行的2d_col,获取每个子数组的长度,比如第一行的两个子数组长度都是2。
    • 用zip把1d_col的元素和对应子数组长度配对,把每个元素重复指定次数组成新子数组,比如"negative"重复2次就得到["negative", "negative"]。
  3. 生成新列:通过apply把处理函数作用到每一行,生成new_col。
  4. 整理结果:筛选出2d_col和new_col两列,就是咱们要的输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:30:47