如何检索DataFrame中列表类型列的元素并实现透视转换
解决方案
可以通过 pandas 的 explode 和 pivot_table 方法组合实现需求,具体步骤如下:
1. 准备示例数据
import pandas as pd df = pd.DataFrame({ 'name': ['Ash', 'Ray'], 'fruits': [['banana', 'kiwi'], ['orange', 'kiwi', 'apple']], 'age': [12, 14] })
2. 展开列表列并构建透视表
# 展开fruits列的列表,每行对应一个水果 exploded_df = df.explode('fruits') # 添加值为1的辅助列,用于后续计数 exploded_df['count'] = 1 # 透视表:以name和age为索引,水果为列,填充缺失值为0 result = exploded_df.pivot_table( index=['name', 'age'], columns='fruits', values='count', fill_value=0, aggfunc='sum' ).reset_index() # 移除列索引的名称标识,对齐目标格式 result.columns.name = None print(result)
输出结果
name age apple banana kiwi orange 0 Ash 12 0 1 1 0 1 Ray 14 1 0 1 1
关键步骤说明
explode('fruits'):将列表类型的列拆分为多行,原数据的每一行会根据列表长度生成对应行数的记录,其他列值保持不变。pivot_table:通过透视实现one-hot编码,aggfunc='sum'确保同一行同一水果的计数正确(这里因每个水果在原列表中仅出现一次,sum和count效果一致),fill_value=0将未出现的水果值填充为0。reset_index():将索引列(name和age)转换为普通列,方便后续使用。
内容的提问来源于stack exchange,提问作者hjun
相关产品推荐
相关产品推荐

