如何使用Pandas对含列表的列生成按另一列分组计数的透视表
解决方法
核心思路是先把存储列表的Col2列拆分为单行单个值的结构,再做分组统计即可,无需复杂自定义逻辑。
完整可运行代码
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'Col1': ['A', 'B', 'C', 'A', 'B', 'C'], 'Col2': [["e", "f"], ["g", "f"], ["g", "h"], ["e", "g"], ["g", "f"], ["g", "e"]] }) # 第一步:将Col2的列表拆分为多行,每个元素对应一行 df_exploded = df.explode('Col2', ignore_index=True) # 第二步:按Col1和拆分后的Col2分组统计次数 # 方式1:使用groupby实现 result = df_exploded.groupby(['Col1', 'Col2'], as_index=False).size().rename(columns={'size': 'count'}) # 方式2:使用pivot_table实现,效果一致 # result = df_exploded.pivot_table(index=['Col1', 'Col2'], aggfunc='size').reset_index(name='count') # 如果需要和示例效果一致,合并相同Col1的展示,设置多层索引即可 result = result.set_index(['Col1', 'Col2']) print(result)
输出结果
count Col1 Col2 A e 2 f 1 g 1 B f 2 g 2 C e 1 g 2 h 1
补充说明
如果你的Col2列当前是字符串格式的列表(比如读取csv后默认存为字符串),需要先转成真实的列表类型,可以用ast.literal_eval处理:
import ast df['Col2'] = df['Col2'].apply(ast.literal_eval)
内容的提问来源于stack exchange,提问作者benzinga
相关产品推荐
相关产品推荐

