如何将Pandas DataFrame列中的列表对应转换为宽表结构
Pandas DataFrame 列表列转宽表解决方案
这里提供两种高效的实现方式,满足你将列表对应列转换为宽表的需求:
方法一:逐行生成Series拼接
利用apply逐行处理类别和数值列表,将类别设为索引、数值设为值生成Series,再与原column1拼接:
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ 'column1': ['text', 'text2'], 'column2': [['cat1', 'cat2', 'cat3'], ['cat2', 'cat3', 'cat1']], 'column3': [[1,2,3], [4,5,6]] }) # 处理每行的类别与数值映射 cat_value_series = df.apply(lambda row: pd.Series(row['column3'], index=row['column2']), axis=1) # 合并得到结果 result_df = pd.concat([df['column1'], cat_value_series], axis=1) print(result_df)
方法二:展开后透视重组
先将列表列展开为行,再通过透视表重新组织成目标结构:
import pandas as pd df = pd.DataFrame({ 'column1': ['text', 'text2'], 'column2': [['cat1', 'cat2', 'cat3'], ['cat2', 'cat3', 'cat1']], 'column3': [[1,2,3], [4,5,6]] }) # 同时展开类别和数值列 exploded_df = df.explode(['column2', 'column3']) # 透视转换为宽表 result_df = exploded_df.pivot( index='column1', columns='column2', values='column3' ).reset_index() result_df.columns.name = None # 清除列索引的名称标签 print(result_df)
两种方法均可得到你需要的输出结构:
column1 cat1 cat2 cat3 0 text 1 2 3 1 text2 6 4 5
内容的提问来源于stack exchange,提问作者Mauritz
相关产品推荐
相关产品推荐

