如何用Pandas将数据透视为按周拆列并填充对应销售值?
正确的Pandas实现方法
要将你的长格式DataFrame转换为目标宽格式,直接用pivot或pivot_table即可,具体步骤如下:
基础场景(无重复记录)
如果每个电影每周只有一条销售记录,使用pivot方法:
# 转换为宽表:行是movie,列是week,值为sales wide_df = df.pivot(index='movie', columns='week', values='sales') # 重命名列名为week_1到week_52 wide_df.columns = [f'week_{col}' for col in wide_df.columns] # 可选:将movie从索引转为普通列 wide_df = wide_df.reset_index()
存在重复记录的场景
如果同一电影同一周有多条销售数据,用pivot_table指定聚合逻辑(比如求和):
# 按movie和week聚合销售数据,这里指定用sum求和 wide_df = df.pivot_table(index='movie', columns='week', values='sales', aggfunc='sum') # 重命名列名 wide_df.columns = [f'week_{col}' for col in wide_df.columns] wide_df = wide_df.reset_index()
为什么之前的方法无效
df.transpose()只是单纯反转行列,不会按电影和周进行分组重组,完全不符合需求。- 你之前使用的
df.pivot(columns=['week', 'sales'])参数错误:columns参数应该指定用来生成新列名的字段(这里是week),values才是填充单元格的字段(sales),不能把sales放到columns里。
内容的提问来源于stack exchange,提问作者jbuddy_13
相关产品推荐
相关产品推荐

