You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas如何将Colour字段行转为列,按周统计各颜色商品的总数量

解决方案

你需要的行转列操作在pandas中有两种常用实现方式,可直接基于你现有代码修改:


方法1:基于现有分组结果用unstack实现

你已经完成了按周+颜色的分组求和,只需要对分组结果执行unstack操作,把Colour这级索引转为列即可:

import pandas as pd
import numpy as np

# 原代码缺少pd前缀,此处补上
df = pd.read_csv("C:/temp/testfolder/datestimescolorsnumbers2.csv")

df['Date'] = pd.to_datetime(df['Date'])
df['Week_commencing'] = df['Date'] - df['Date'].dt.weekday * np.timedelta64(1, 'D')

# 分组求和仅保留需要的Quantity字段,避免无关字段参与计算
df1 = df.groupby(['Week_commencing', 'Colour'])['Quantity'].sum()

# 核心操作:把Colour行转成列,fillna将某周无销量的颜色默认填充为0
df_wide = df1.unstack('Colour', fill_value=0)

# 重命名列名为你需要的格式,如果Colour字段存的是英文值,替换字典key为对应英文即可
df_wide = df_wide.rename(columns={
    '蓝色': '蓝色商品总量',
    '红色': '红色商品总量',
    '绿色': '绿色商品总量'
})

# 重置索引把周起始日从索引转为普通列,注意index参数是布尔值False不是字符串
df_wide.reset_index().to_csv("C:/temp/testfolder/outputGroupByWeek2.csv", encoding="utf-8", index=False)

方法2:用pivot_table一步完成

也可以跳过单独写groupby的步骤,直接用透视表同时完成分组+行转列操作:

import pandas as pd
import numpy as np

df = pd.read_csv("C:/temp/testfolder/datestimescolorsnumbers2.csv")
df['Date'] = pd.to_datetime(df['Date'])
df['Week_commencing'] = df['Date'] - df['Date'].dt.weekday * np.timedelta64(1, 'D')

# 一行完成透视:行索引为周起始日,列是颜色,值为数量求和,空值填0
df_wide = pd.pivot_table(
    df,
    index='Week_commencing',
    columns='Colour',
    values='Quantity',
    aggfunc='sum',
    fill_value=0
)

# 后续重命名列、导出操作和方法1完全一致
df_wide = df_wide.rename(columns={
    '蓝色': '蓝色商品总量',
    '红色': '红色商品总量',
    '绿色': '绿色商品总量'
})
df_wide.reset_index().to_csv("C:/temp/testfolder/outputGroupByWeek2.csv", encoding="utf-8", index=False)

内容的提问来源于stack exchange,提问作者JasP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:54:04