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

如何在Python中基于映射字典将列表列转为多列?

解决方案

问题描述

我有一个包含列表列的Pandas DataFrame:

import pandas as pd
d = {'id': ["First", "Second"], 'list_column': [[1,2,3], [3,2]]}
df = pd.DataFrame(data=d)

数据结构如下:

idlist_column
First[1, 2, 3]
Second[3, 2]

同时有一个将列表数值映射为目标列名的字典:

mapping_dict = {
  1: "red",
  2: "blue",
  3: "green"
}

需要将list_column转换为反映列表内容的多列,最终得到如下结果:

idredbluegreen
First111
Second011

方法一:使用explode + get_dummies(高效向量化操作)

这种方法利用Pandas内置向量化函数,适合处理较大数据集:

import pandas as pd

# 初始化数据
d = {'id': ["First", "Second"], 'list_column': [[1,2,3], [3,2]]}
df = pd.DataFrame(data=d)
mapping_dict = {1: "red", 2: "blue", 3: "green"}

# 1. 展开列表列,将每个列表元素拆分为单独行
exploded_df = df.explode('list_column')
# 2. 用字典映射替换数值为列名
exploded_df['list_column'] = exploded_df['list_column'].map(mapping_dict)
# 3. 生成哑变量矩阵
dummies = pd.get_dummies(exploded_df, columns=['list_column'], prefix='', prefix_sep='')
# 4. 按id分组求和,得到每个id对应的列标记(1表示存在,0表示不存在)
result = dummies.groupby('id').sum().reset_index()

print(result)

方法二:使用apply自定义逻辑(直观易懂)

如果需要更灵活的自定义逻辑,这种方法更直观:

import pandas as pd

# 初始化数据
d = {'id': ["First", "Second"], 'list_column': [[1,2,3], [3,2]]}
df = pd.DataFrame(data=d)
mapping_dict = {1: "red", 2: "blue", 3: "green"}

# 定义函数:将单个列表转换为对应列的0/1值
def convert_list_to_columns(lst):
    # 先初始化所有目标列为0
    col_values = {col: 0 for col in mapping_dict.values()}
    # 遍历列表中的数值,映射后将对应列设为1
    for num in lst:
        col_values[mapping_dict[num]] = 1
    return pd.Series(col_values)

# 应用函数并与原DataFrame的id列合并
result = df[['id']].join(df['list_column'].apply(convert_list_to_columns))

print(result)

两种方法最终都会输出目标格式的DataFrame。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:25:36