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

如何将Pandas DataFrame中的列表列按值匹配转换为多列?

解决方法

可以通过两种简洁的方式实现需求:

方法一:逐行处理生成字典展开

直接对每行的列表进行过滤和映射,生成对应列的键值对后展开为多列:

import pandas as pd
import numpy as np

# 原数据
df = pd.DataFrame({'column': [[np.nan, np.nan, np.nan], [1, np.nan, np.nan], [2, 3, np.nan], [3, 2, 1]]})

def map_values(lst):
    # 过滤列表中的NaN值,生成目标列名与值的字典
    valid_values = [x for x in lst if not np.isnan(x)]
    return {f'column_{int(val)}': val for val in valid_values}

# 应用函数并转换为DataFrame,补全缺失列并填充NaN
result = df['column'].apply(map_values).apply(pd.Series)
result = result.reindex(columns=['column_1', 'column_2', 'column_3']).fillna(np.nan)

print(result)

运行输出:

column_1  column_2  column_3
0       NaN       NaN       NaN
1       1.0       NaN       NaN
2       NaN       2.0       3.0
3       1.0       2.0       3.0

方法二:利用explode和pivot转换

通过拆分列表、生成列名再透视的方式实现:

import pandas as pd
import numpy as np

# 原数据
df = pd.DataFrame({'column': [[np.nan, np.nan, np.nan], [1, np.nan, np.nan], [2, 3, np.nan], [3, 2, 1]]})

# 拆分列表并过滤NaN,生成目标列名
df_exploded = df.explode('column').dropna(subset=['column'])
df_exploded['col_name'] = 'column_' + df_exploded['column'].astype(int).astype(str)

# 透视得到结果,补全缺失列并填充NaN
result = df_exploded.pivot(index=df_exploded.index, columns='col_name', values='column')
result = result.reindex(columns=['column_1', 'column_2', 'column_3']).fillna(np.nan)

print(result)

两种方法均可得到目标结果,第一种适合小数据量的快速处理,第二种在数据量较大时性能更优。

内容的提问来源于stack exchange,提问作者T C Molenaar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 21:45:33