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

如何基于Pandas DataFrame的列表型列生成对应样本取值的衍生列

如何基于Pandas DataFrame的列表型列生成对应样本取值的衍生列

嘿,这个需求其实很好实现,核心就是把列表列里的每个样本名称,对应到原DataFrame里的数值列,生成新的衍生列就好。我给你整理了具体的实现方案,你可以直接套用:

完整实现代码

import pandas as pd
import numpy as np

# 你的原始数据
df_matrix_data = {'11': [['P4-1', 'P4-2', 'P4-3'], ['P4-1', 'P4-3', 'P4-4']],
                  '00': [['P4-4', 'P4-6', 'P4-7',], ['P4-2', 'P4-5', 'P4-7']],
                  'P4-1': [1, 2], 'P4-2': [6, 8], 'P4-3': [5, 2], 'P4-4': [2, 3], 'P4-5': [np.nan, 2], 'P4-6': [6, np.nan],
                  'P4-7': [3, 2]}
df_matrix = pd.DataFrame.from_dict(df_matrix_data)

# 定义需要处理的列表型目标列
target_cols = ['11', '00']

for col in target_cols:
    # 把列表列拆分为多个临时列,得到每个位置的样本名称
    split_cols = df_matrix[col].apply(pd.Series)
    # 给临时列重命名为「原列名_序号」的格式,比如11_1、11_2
    split_cols.columns = [f"{col}_{idx+1}" for idx in split_cols.columns]
    
    # 批量生成新列:将每个临时列的样本名称,映射到原DataFrame的数值列
    new_cols = split_cols.apply(lambda x: df_matrix.lookup(df_matrix.index, x), axis=0)
    # 把新列合并到原DataFrame中
    df_matrix = pd.concat([df_matrix, new_cols], axis=1)

# 打印最终结果
print(df_matrix)

代码解释

我把代码拆成几个关键步骤给你讲清楚:

  • 第一步:遍历目标列:我们只需要处理11和00这两个存着样本列表的列
  • 第二步:拆分列表列:用apply(pd.Series)把每个单元格的列表拆成多列,比如11列的每个列表有3个元素,拆分后会得到3列,然后把列名改成11_1、11_2、11_3,完全符合你的命名要求
  • 第三步:映射数值:用df_matrix.lookup这个神器,它可以根据行索引和列名,精准定位到对应单元格的数值。我们把拆分后的样本名称列传入,就能直接拿到每个位置对应的数值
  • 第四步:合并新列:把生成的衍生列合并到原DataFrame,就得到了你想要的最终结果

运行效果

运行完代码后,输出的DataFrame和你期望的完全一致:

11                  00  P4-1  P4-2  P4-3  P4-4  P4-5  P4-6  P4-7  11_1  11_2  11_3  00_1  00_2  00_3
0  [P4-1, P4-2, P4-3]  [P4-4, P4-6, P4-7]     1     6     5     2   NaN   6.0     3     1     6     5     2     6     3
1  [P4-1, P4-3, P4-4]  [P4-2, P4-5, P4-7]     2     8     2     3   2.0   NaN     2     2     2     3     8     2     2

小提示

如果你的列表列里的列表长度不一致(比如有的行是3个元素,有的是4个),apply(pd.Series)会自动给短列表的行补NaN,这时候你可以根据需求选择保留或者删除这些NaN行/列。

备注:内容来源于stack exchange,提问作者emor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 18:47:59