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

Pandas将行字段值映射为列表并扩展新列合并到原DataFrame的方法

实现方案

你已经构建好了列值到30维列表的映射字典col的前提下,直接用map+apply+concat的组合就能实现需求,不需要单独为每个列值生成子DataFrame:

单列映射代码示例

import pandas as pd

# 替换为你自己的原DataFrame
df = pd.DataFrame([[32,23,17,0,3,24,9,14]], columns=['X0','X1','X2','X3','X4','X5','X6','X8'])
# 你已构建好的映射字典,注意键的类型要和原表对应列的数值类型一致,这里X8是int类型,所以键用14而非字符串'14'
col = {
    'X8': {
        14: [ 0.06405287, -0.1176078 , -0.06206927,  0.08389127, -0.18036067,
              0.35158703, -0.0928449 , -0.0974429 , -0.06705306, -0.17196381,
             -0.03776502,  0.09204011,  0.47813812,  0.16258538,  0.2699648 ,
              0.07496626, -0.09791522, -0.31499937, -0.24898018,  0.06126055,
              0.13187763,  0.21042736, -0.1585868 ,  0.08355565, -0.13935572,
              0.12408883,  0.2043313 , -0.12544186, -0.09223691,  0.00720569]
    }
}

# 1. 匹配X8列的每个值到对应的30维列表,把列表展开为单独的列
x8_map = df['X8'].map(col['X8']).apply(pd.Series)
# 2. 给新列重命名为X8_0 ~ X8_29格式
x8_map.columns = [f'X8_{i}' for i in range(30)]
# 3. 按行拼接原DataFrame和新生成的列
result = pd.concat([df, x8_map], axis=1)

多列批量映射代码示例

如果有多个列需要做相同的映射处理,直接循环处理即可:

need_map_cols = ['X8', 'X9', 'X10'] # 替换为你实际要映射的列名
df_parts = [df]
for col_name in need_map_cols:
    tmp = df[col_name].map(col[col_name]).apply(pd.Series)
    tmp.columns = [f'{col_name}_{i}' for i in range(30)]
    df_parts.append(tmp)
result = pd.concat(df_parts, axis=1)

注意事项

  • 映射字典col中对应列的键的类型,必须和原表对应列的数值类型完全一致,否则会出现匹配失败返回NaN的问题
  • 该方案自动按原表行索引对齐,不会出现行顺序错乱的问题,性能远高于循环逐行/逐值生成子DataFrame的实现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:45:06