基础入门
从日期列提取月份信息,并用 groupby 对日收益率做月度平均统计,完成从逐行表到汇总表的第一次过渡。
前面几讲里,你一直在一张逐日表上工作:选列、加收益率、处理空值、排序、算均线。每一步都很重要,但它们大多仍然停留在“逐行数据”的层面。到了第 7 讲,一个非常自然的升级就是:不再只盯着每天发生了什么,而开始问,按月份看,这张表能告诉我什么。这个转变非常重要,因为它意味着你第一次从原始粒度抽身,进入汇总视角。
在真实分析里,这种视角切换非常常见。因为很多时候,逐日数据太细,难以快速抓住阶段特征;而一旦按月、按周或者按季度聚合,很多规律会更容易被观察出来。按月份统计平均收益,就是最适合作为入门的一个小练习。它不复杂,却足以让你第一次感受到 groupby() 的价值,也能让你看到 pandas 不只是会处理逐行数据,还能把这些行压缩成更容易解读的总结表。
所以第 7 讲真正建立的,不只是“会按月求平均”,而是开始让你具备从原始表转向汇总表的意识。这一步对后面所有统计分析都很关键。
很多新手第一次接触按月统计时,会直接把注意力放在 groupby() 上,好像分组本身才是核心。其实从理解路径上看,更自然的第一步是先解决一个简单问题:每天这一行,到底属于哪个月份。只要这个映射关系先建立起来,后面的按月聚合就会显得非常顺。
这就是为什么在第 7 讲里,先新增一个 month 列会特别有帮助。它把原本抽象的“按月分组”变成了一个你肉眼就能看到的过程。你不再只是知道 pandas 最后会吐出一个月度结果,而是先亲眼看到逐日记录怎样被归入同一个月份桶里。这种中间层对入门者很重要,因为它显著降低了 groupby() 的抽象感。
从数据工作流角度看,这一步也非常合理。先明确时间归属,再谈统计口径,比一上来直接做黑箱式聚合,更容易建立稳定理解。只要月份映射先看清,后面的平均收益结果就不会显得像凭空冒出来的一张表。
一看到按月平均收益,很多人会不自觉地觉得这是在把逐日数据“压扁”,好像细节都被丢掉了。这个理解不完全错,但也不够准确。更好的说法是:月均收益不是在代替逐日收益,而是在提供另一种观察角度。逐日收益让你看日常波动,按月平均则让你更快看到阶段层面的偏强偏弱。
这两种视角没有谁绝对更高级,它们解决的是不同问题。若你想理解某几天发生了什么,逐日数据更适合;若你想快速判断近几个月整体是偏正还是偏负,月度汇总就更高效。也正因为如此,第 7 讲特别适合作为 pandas 短课后半段的一次视角升级。它没有离开前面的工作表,而是在已有收益率之上切出了一层新的观察面。
这种从细粒度到粗粒度的切换,在真实研究里会反复出现。只要你现在先把这一步做顺了,后面面对更复杂的时间聚合时就不会太陌生。
很多入门者第一次做按月聚合时,看到结果只有一两行,会下意识觉得是不是做得太简单了,或者是不是样本太少导致这一讲“没学到什么”。其实不是。第 7 讲当前真正要训练的,不是得到多丰富的月度结果,而是学会从逐日表构造出一张按月份组织的汇总表。只要这一步成立,哪怕当前样本跨度只覆盖一个月,练习仍然完全有效。
这个认识很重要,因为它能帮你把注意力放回方法本身,而不是结果行数。很多时候入门练习不需要一开始就追求大样本、长区间,关键是先把处理链路走通。月度结果行数少,并不妨碍你理解“日期如何映射成月份”“分组如何生效”“平均收益如何得出”。这些才是这一讲真正要掌握的内容。
换句话说,第 7 讲的价值,不在于输出表长不长,而在于你是否已经开始具备用时间维度聚合结果的能力。
很多人在做完 groupby().mean() 以后,会直接接受结果列名还是 return。从程序上当然没问题,但从阅读体验看,显式改成 avg_return 这样的名字会更稳。因为一旦这张结果表脱离原上下文单独出现,新的列名能够更清楚地告诉你:这里已经不是逐日原始收益,而是按月份聚合后的平均值。
这种重命名看似只是个小细节,却非常值得在入门阶段养成。因为它体现的是一种结果表意识:一张汇总表不是简单把原表压缩一下就完事,它应该具备更清楚的语义标签,让人一眼看懂它代表什么。对自己后面回看也好,对别人接手也好,这种清晰命名都会显著降低理解成本。
所以第 7 讲里改列名,不只是代码层面的“美化”,更是在帮助你把一张 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 日均线,这一讲则第一次把逐日数据压缩成按月份组织的汇总结果。下一讲会把前面已经形成的主表或汇总表真正导出成文件,让整套练习形成完整闭环。
风险揭示与免责声明
本页面内容仅用于量化研究与技术交流,旨在展示研究方法与流程,不构成对任何金融产品、证券或衍生品的要约、招揽、推荐或保证。
本文所涉历史数据、回测结果与示例参数不代表未来表现,也不应作为投资决策依据。
市场存在波动、流动性与执行偏差等不确定性,任何策略均可能出现收益波动或阶段性失效。
读者应结合自身风险承受能力进行独立判断,并在必要时咨询持牌专业机构意见。