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

如何将DataFrame列名与对应列表值映射生成规整新DataFrame

如何将包含列表的DataFrame转换为列名对应值的宽表?

我的原始DataFrame结构:

Column_NameValues
X[1, 2, 3]
Y[a, b, c]
Z[20-09-2020, 20-12-2202, 1-1-2001]
W[0.1, 0.2, 0.3]

数据类型输出:

df.dtypes
# Values         object
# column_name    object
# dtype: object

期望得到的新DataFrame结构:

XYZW
01a20-09-20200.1
12b20-12-22020.2
23c1-1-20010.3

已完成的前置代码:

df_all = pd.read_sql_table('Test',engine)
df_test = pd.Series({c:df_all[c].unique() for c in df_all})
df = pd.DataFrame({'column_name': df_test.index,'Values':df_test.values})
df.reset_index(drop=True,inplace=True)

解决方案

嘿,你已经完成了最核心的前置步骤,现在只需要把这些列表展开并映射到对应的列就行啦,给你两种实用的方法:

方法一:简洁直接的字典转换

因为你的column_name刚好是我们要的新列名,Values里的列表就是每列对应的值,直接把它们打包成字典传给pd.DataFrame就行:

new_df = pd.DataFrame(dict(zip(df['column_name'], df['Values'])))

一行代码搞定,非常高效。

方法二:分步拆解更易理解

如果想清楚看到每一步的转换过程,可以用explode先把列表拆成多行,再透视成宽表:

# 1. 把Values里的每个元素拆成单独的行,保留对应的列名
df_exploded = df.explode('Values')
# 2. 给每个列名下的元素添加行号,用来对齐后续的透视
df_exploded['row_id'] = df_exploded.groupby('column_name').cumcount()
# 3. 透视生成宽表,最后清理一下列名层级
new_df = df_exploded.pivot(index='row_id', columns='column_name', values='Values').reset_index(drop=True)
new_df.columns.name = None

两种方法都能得到你想要的结果,选哪种看你更偏向简洁还是过程可视化啦。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:02:28