深圳融克迪特科技有限公司 Logo,金融科技,量化交易,软件开发

深圳融克迪特科技有限公司

RONG CREDIT TECHNOLOGY CO., LTD.

基础入门

【pandas 系列 第7讲】按月份统计平均收益

从日期列提取月份信息,并用 groupby 对日收益率做月度平均统计,完成从逐行表到汇总表的第一次过渡。

2026-04-23 智铨研究 阅读时长 5 分钟

目录

pandas · 入门短课

  1. 第 1 讲【pandas 系列 第1讲】金融数据入门第1讲:5行命令读取CSV行情并验证结构完整性
  2. 第 2 讲【pandas 系列 第2讲】选列筛行:保留日期收盘价和成交量
  3. 第 3 讲【pandas 系列 第3讲】新增收益率列
  4. 第 4 讲【pandas 系列 第4讲】处理缺失值
  5. 第 5 讲【pandas 系列 第5讲】排序并重置索引
  6. 第 6 讲【pandas 系列 第6讲】计算5日和10日均线
  7. 第 7 讲【pandas 系列 第7讲】按月份统计平均收益
  8. 第 8 讲【pandas 系列 第8讲】导出清洗后的行情表

一、为什么按月份统计平均收益,是从“逐行看表”走向“汇总看结果”的关键一步

前面几讲里,你一直在一张逐日表上工作:选列、加收益率、处理空值、排序、算均线。每一步都很重要,但它们大多仍然停留在“逐行数据”的层面。到了第 7 讲,一个非常自然的升级就是:不再只盯着每天发生了什么,而开始问,按月份看,这张表能告诉我什么。这个转变非常重要,因为它意味着你第一次从原始粒度抽身,进入汇总视角。

在真实分析里,这种视角切换非常常见。因为很多时候,逐日数据太细,难以快速抓住阶段特征;而一旦按月、按周或者按季度聚合,很多规律会更容易被观察出来。按月份统计平均收益,就是最适合作为入门的一个小练习。它不复杂,却足以让你第一次感受到 groupby() 的价值,也能让你看到 pandas 不只是会处理逐行数据,还能把这些行压缩成更容易解读的总结表。

所以第 7 讲真正建立的,不只是“会按月求平均”,而是开始让你具备从原始表转向汇总表的意识。这一步对后面所有统计分析都很关键。

二、为什么做时间聚合之前,先把日期映射到月份层是最自然的做法

很多新手第一次接触按月统计时,会直接把注意力放在 groupby() 上,好像分组本身才是核心。其实从理解路径上看,更自然的第一步是先解决一个简单问题:每天这一行,到底属于哪个月份。只要这个映射关系先建立起来,后面的按月聚合就会显得非常顺。

这就是为什么在第 7 讲里,先新增一个 month 列会特别有帮助。它把原本抽象的“按月分组”变成了一个你肉眼就能看到的过程。你不再只是知道 pandas 最后会吐出一个月度结果,而是先亲眼看到逐日记录怎样被归入同一个月份桶里。这种中间层对入门者很重要,因为它显著降低了 groupby() 的抽象感。

从数据工作流角度看,这一步也非常合理。先明确时间归属,再谈统计口径,比一上来直接做黑箱式聚合,更容易建立稳定理解。只要月份映射先看清,后面的平均收益结果就不会显得像凭空冒出来的一张表。

三、为什么“月均收益”不是在代替逐日收益,而是在提供另一种观察角度

一看到按月平均收益,很多人会不自觉地觉得这是在把逐日数据“压扁”,好像细节都被丢掉了。这个理解不完全错,但也不够准确。更好的说法是:月均收益不是在代替逐日收益,而是在提供另一种观察角度。逐日收益让你看日常波动,按月平均则让你更快看到阶段层面的偏强偏弱。

这两种视角没有谁绝对更高级,它们解决的是不同问题。若你想理解某几天发生了什么,逐日数据更适合;若你想快速判断近几个月整体是偏正还是偏负,月度汇总就更高效。也正因为如此,第 7 讲特别适合作为 pandas 短课后半段的一次视角升级。它没有离开前面的工作表,而是在已有收益率之上切出了一层新的观察面。

这种从细粒度到粗粒度的切换,在真实研究里会反复出现。只要你现在先把这一步做顺了,后面面对更复杂的时间聚合时就不会太陌生。

四、为什么结果只有一两个月,也完全不影响这一讲成立

很多入门者第一次做按月聚合时,看到结果只有一两行,会下意识觉得是不是做得太简单了,或者是不是样本太少导致这一讲“没学到什么”。其实不是。第 7 讲当前真正要训练的,不是得到多丰富的月度结果,而是学会从逐日表构造出一张按月份组织的汇总表。只要这一步成立,哪怕当前样本跨度只覆盖一个月,练习仍然完全有效。

这个认识很重要,因为它能帮你把注意力放回方法本身,而不是结果行数。很多时候入门练习不需要一开始就追求大样本、长区间,关键是先把处理链路走通。月度结果行数少,并不妨碍你理解“日期如何映射成月份”“分组如何生效”“平均收益如何得出”。这些才是这一讲真正要掌握的内容。

换句话说,第 7 讲的价值,不在于输出表长不长,而在于你是否已经开始具备用时间维度聚合结果的能力。

五、为什么重命名结果列,是让汇总表更像“成果表”的一个关键细节

很多人在做完 groupby().mean() 以后,会直接接受结果列名还是 return。从程序上当然没问题,但从阅读体验看,显式改成 avg_return 这样的名字会更稳。因为一旦这张结果表脱离原上下文单独出现,新的列名能够更清楚地告诉你:这里已经不是逐日原始收益,而是按月份聚合后的平均值。

这种重命名看似只是个小细节,却非常值得在入门阶段养成。因为它体现的是一种结果表意识:一张汇总表不是简单把原表压缩一下就完事,它应该具备更清楚的语义标签,让人一眼看懂它代表什么。对自己后面回看也好,对别人接手也好,这种清晰命名都会显著降低理解成本。

所以第 7 讲里改列名,不只是代码层面的“美化”,更是在帮助你把一张 groupby() 结果变成一张真正可读、可复用的成果表。

六、为什么groupby()这一讲真正难的不是语法,而是分清“分组键”和“被聚合值”

很多新手刚接触 groupby() 时,最容易迷糊的地方并不在函数本身,而是在脑子里还没完全分清两件事:到底拿什么来分组,拿什么来做聚合。第 7 讲正好是一个非常适合练这件事的场景。month 是分组键,它负责把每天的记录归到对应月份;return 是被聚合的值,它负责在每个组里被求平均。

只要这两个角色在脑子里清楚了,groupby() 就会好理解很多。因为你不再只是机械背一段代码,而是明确知道:先按月份把行分堆,再在每一堆里对收益率求平均。这个分工视角对后面的更多聚合非常重要。你以后不管是按月份统计成交量、按代码统计均值,还是做多列聚合,本质上都是在重复这套思路。

因此,第 7 讲除了得到月均收益结果之外,也是在帮你打下 groupby() 最核心的理解地基。这个地基一旦建立,后面很多看起来更复杂的统计,其实都只是它的扩展。

七、为什么这一讲本质上是在让你第一次产出“第二张表”

前面几讲虽然不断在工作表上追加列,但本质上都还是围绕同一张主表推进。而到了第 7 讲,事情发生了一个重要变化:你第一次不只是修改原表,而是从原表中抽出一张新的结果表。这张按月份汇总的小表,结构和用途都已经和主表不一样了。主表还是逐日记录,汇总表则更像阶段总结。

这种“第二张表”意识很重要。因为很多真实的数据分析并不是只有一张表从头做到尾,而是会从原始层、中间层、汇总层逐步派生出新的结果表。第 7 讲正好让你第一次体验这种派生过程。你会开始意识到:原表不是所有结果的最终形态,很多分析结论应该被沉淀到新的、更适合阅读和比较的结果表中。

只要这个意识先建立,后面做更复杂的汇总、导出和可视化时,就会自然很多。你不再执着于“一张表包办一切”,而会开始习惯让不同层次的表承担不同任务。

八、这一讲为最后的成果导出准备了什么

一旦月度汇总表已经生成,整个 pandas 短课就到了一个非常自然的收束位置。因为你手上此时其实已经有了两类成果:一类是经过清洗、排序、加列后的主表,另一类是按月份压缩出来的汇总表。无论你最后选择导出哪一类,第 7 讲都已经为最后一讲打好了结果层的基础。

这也是为什么这一讲的位置非常合适。它没有再往里加过多新技巧,而是顺着已有收益率列,把结果进一步沉淀成一张总结表。这样一来,第 8 讲的导出就不是为了凑一个结束动作,而是确实有内容可导、有成果可保存。

从整套短课的连贯性看,第 7 讲正好充当了一个桥梁。它把前面的逐行处理过渡成结果汇总,也把下一讲的文件导出变成一件真正有意义的事。

九、为什么按月汇总之后,最好立刻回头核对“每个月到底包含了哪些天”

很多人第一次成功做出月均收益表后,会很自然地把注意力放在平均值本身,却忽略了另一个同样重要的问题:这个月均值到底是由哪些交易日构成的。这个核对动作非常值得在第 7 讲就建立起来。因为一旦月份映射、日期解析或筛选顺序有细微偏差,最后聚合出来的月均值看上去仍然可能是一个正常数字,但它实际包含的天数和样本范围已经不完全对了。

对入门者来说,这一步很有价值,因为它会让你意识到:汇总结果不是自动可信的,仍然要能回到原始层追问来源。只要你能在按月结果出来后,顺手核对一下每个月对应的原始日期范围,你对 groupby() 的理解就会明显更扎实。你不只是知道它能汇总,还知道它汇总的是哪些行。

这种“汇总后回看原始来源”的习惯,后面做周度、季度甚至行业分组统计时都会反复用到。现在先练一次,后面会省很多事。

十、为什么这一讲也在帮你建立“结果表要能独立阅读”的意识

月度汇总表做出来以后,它已经不再只是主表的一个附属切片,而更像一张可以单独拿出来看的结果表。也正因为如此,这一讲非常适合开始建立一个很实用的意识:结果表应该尽量能独立阅读。也就是当它脱离原主表单独出现时,你仍然能一眼看懂每一列是什么意思、它是按什么维度汇总出来的、当前排序逻辑是什么。

这层意识和前面提到的列重命名、月份列显式保留其实是连在一起的。它们共同指向一个更成熟的数据处理习惯:不是只让代码跑出结果,而是让结果本身也具备可读性。对 pandas 学习来说,这一点非常关键,因为后面很多分析工作并不难在计算上,而难在如何把计算结果整理成别人和未来的你都能看懂的表。

所以,第 7 讲看似只是按月份求平均,实际上已经在训练你把“运算结果”升级成“可交付结果”。这是一个很重要的转变。

十一、为什么这一讲也适合顺手比较“原表行数”和“汇总表行数”

按月汇总之后,还有一个很适合初学者顺手做的小检查,就是把原表行数和汇总表行数并排看一下。这个动作看上去简单,却非常能帮助你理解聚合到底做了什么。原表可能有很多个交易日,而汇总表通常只剩几个月份;这正是从细粒度数据压缩到结果层的直接体现。只要你把这两个数字并排看过一次,groupby() 带来的“压缩感”会比只看代码清楚得多。

更重要的是,这个小检查还能帮你及时发现异常。若你原本以为样本跨了几个月,结果汇总表却只有一个月;或者原表明明跨度不长,汇总表却意外多出月份,这都可能提示日期解析或月份提取哪里出了偏差。也就是说,它既是理解动作,也是一个非常轻量的质量检查。

所以,第 7 讲除了求出月均收益之外,也很适合把“原表和结果表数量关系”纳入自己的观察范围。这会让你对汇总动作本身理解得更扎实。

十二、这一讲做到什么程度,才算真正完成了从原表到汇总表的过渡

第 7 讲真正完成的标志,不只是代码能跑出一张月均收益表,而是你已经清楚知道:月份是怎样从日期里提取出来的,收益率是怎样在月度层面被聚合的,结果表为什么需要重新命名和整理,以及汇总之后还能怎样回到原始层核对来源。只要这些层已经在脑子里连起来,这一讲就不再只是一次 groupby() 练习,而是真正完成了从逐行数据到结果表的第一次过渡。

这也是后面继续做周度、季度或行业汇总时最重要的起点,因为方法已经先被你掌握了,而不只是这一次的代码形式。

只要你已经能在汇总结果出来后,同时回答“它是怎么聚出来的”和“它还能怎样回到原始表核对来源”,这一讲就已经真正把结果层思维带进来了。后面再做更复杂的聚合时,你会明显更稳,也更不容易把结果表当成来路不明的黑箱输出。

十三、总结

这一讲的重点,不只是用 groupby() 求出月均收益,而是第一次从逐日工作表走向汇总结果表。你需要理解,先把日期映射到月份,再把收益率按组求平均,这本质上是在建立一种新的观察层。月均收益不是替代逐日收益,而是在提供更高一层的阶段视角。只要你已经能产出一张带 month 和平均收益列的月度结果表,这一讲就真正完成了。

十四、系列衔接

本讲是《pandas金融数据入门短课》的第 7 讲,当前主题是《按月份统计平均收益》。上一讲已经在主表上加入了 5 日和 10 日均线,这一讲则第一次把逐日数据压缩成按月份组织的汇总结果。下一讲会把前面已经形成的主表或汇总表真正导出成文件,让整套练习形成完整闭环。

十五、风险揭示与免责声明

风险揭示与免责声明

本页面内容仅用于量化研究与技术交流,旨在展示研究方法与流程,不构成对任何金融产品、证券或衍生品的要约、招揽、推荐或保证。

本文所涉历史数据、回测结果与示例参数不代表未来表现,也不应作为投资决策依据。

市场存在波动、流动性与执行偏差等不确定性,任何策略均可能出现收益波动或阶段性失效。

读者应结合自身风险承受能力进行独立判断,并在必要时咨询持牌专业机构意见。