如何用Python/Pandas或Excel将行数据转换为日历式业绩表?
解决CSV月度业绩数据转年度矩阵表问题
以下提供两种实用方案,分别适配非编程用户和有编程基础的用户:
方案一:Excel/Google Sheets可视化操作(无需编程)
- 预处理数据:
将CSV导入工具后,用数据>分列功能,按冒号+空格拆分日期与回报列,确保Date列是MM/YYYY格式,Return列保留百分比文本或转成数值格式。 - 生成数据透视表:
- 选中全量数据,点击
插入>数据透视表,指定输出位置。 - 字段配置:
- 提取年份(用公式
TEXT(Date列,"YYYY"))拖至「行」区域 - 提取月份(用公式
TEXT(Date列,"MM"))拖至「列」区域 - 将
Return列拖至「值」区域,汇总方式选「求和」(单月单数据时直接显示原值)
- 提取年份(用公式
- 选中全量数据,点击
- 格式调整:
- 把1-12月列重命名为
Jan, Feb, ..., Dec(或中文月份名) - 调整值区域为百分比格式,整理成目标矩阵样式即可。
- 把1-12月列重命名为
方案二:Python脚本批量处理(适配大数据量)
用pandas库可高效完成转换,代码如下:
import pandas as pd # 读取CSV,指定分隔符为冒号+空格 df = pd.read_csv('your_data.csv', sep=': ', header=0, names=['Date', 'Return']) # 拆分日期为月份、年份并转成数值类型 df[['Month', 'Year']] = df['Date'].str.split('/', expand=True) df['Month'] = df['Month'].astype(int) df['Year'] = df['Year'].astype(int) # 清洗回报列,去掉百分号转成数值 df['Return'] = df['Return'].str.replace('%', '').astype(float) # 生成透视表,缺失月份填充为0%(可按需修改默认值) pivot_table = df.pivot_table(index='Year', columns='Month', values='Return', fill_value=0) # 调整月份顺序为1-12,重命名为英文月份名 month_labels = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] pivot_table = pivot_table.reindex(columns=range(1,13)) pivot_table.columns = month_labels # 转回带正负号的百分比格式 pivot_table = pivot_table.applymap(lambda x: f"{x:+}%") # 打印结果或保存为新CSV print(pivot_table) pivot_table.to_csv('performance_matrix.csv')
使用提示:
- 替换
your_data.csv为你的实际文件名 - 若需调整缺失月份的默认显示值,修改
fill_value参数即可
内容的提问来源于stack exchange,提问作者GC123
相关产品推荐
相关产品推荐

