如何按列表类型的Genre列分组统计Sales总和(避免展开列)
解决按Genre列表内单个类型统计销售额的问题
你的原代码问题在于:将Genre列的列表转成tuple后分组,是把整个类型组合当作一个分组(比如["Sci-fi","Action"]会被视为一个独立组),而不是拆分出每个类型单独统计,所以得到的结果不符合需求。
以下是两种可行的解决方案:
方法一:临时展开Genre列(简单直观)
利用explode()方法临时将Genre的列表拆分成多行,再按单个类型分组求和,操作完成后不会修改原DataFrame:
import pandas as pd data = { "Movie": ["Avatar", "Leap Year", "Life is Beautiful","Roman Holiday"], "Sales": [5000, 2500, 2800, 4050], "Genre": [["Sci-fi","Action"], ["Romantic", "Comedy"], ["Tragic", "Comdey"], ["Romantic"]] } df = pd.DataFrame(data) # 临时拆分Genre并统计各类型总销售额 sales_by_genre = df.explode('Genre').groupby('Genre')['Sales'].sum() print(sales_by_genre)
输出结果:
Genre Action 5000 Comdey 2800 Comedy 2500 Romantic 6550 Sci-fi 5000 Tragic 2800 Name: Sales, dtype: int64
(注意:你的数据里"Comdey"是拼写错误,和"Comedy"会被视为两个不同类型,建议统一拼写)
方法二:不展开列,通过Apply拆分统计
如果不想临时展开列,可以用apply()每行生成对应类型的销售额Series,再求和得到结果:
sales_by_genre = df.apply(lambda row: pd.Series(row['Sales'], index=row['Genre']), axis=1).sum() print(sales_by_genre)
这个方法直接在原DataFrame基础上计算,不会生成中间的展开数据,结果和方法一完全一致。
内容的提问来源于stack exchange,提问作者RezwanU
相关产品推荐
相关产品推荐

