如何用Pandas按股票代码计算各公司交易年限并生成新列
解决Pandas按股票分组计算交易年限的问题
你的问题核心在于之前的代码没有针对每个股票分组计算年份差,而是取了整个DataFrame的全局最大/最小年份,所以得到的结果不符合预期。下面是最简洁高效的实现方法:
正确代码实现
我们可以用Pandas的groupby+transform组合,transform会把分组计算的结果自动广播回原DataFrame的每一行,完美匹配你需要给每一行新增对应股票交易年限的需求:
# 直接按Symbol分组,对Date列计算年份差并广播到每一行 mydata['Yrs_Publ_Trd'] = mydata.groupby('Symbol')['Date'].transform( lambda x: x.dt.year.max() - x.dt.year.min() )
为什么之前的代码不对?
你之前写的循环里,mydata.Date.dt.year.max()和mydata.Date.dt.year.min()都是针对整个DataFrame的全局统计值,不是每个Symbol分组内的。比如不管循环到哪个Symbol,你取的都是所有股票里最早和最晚的年份差,自然得不到每个股票自己的交易年限。
验证结果
运行上面的代码后,你的DataFrame就会新增Yrs_Publ_Trd列,每个Symbol对应的所有行都会显示该股票最早与最晚交易年份的差值,和你预期的结果一致。
内容的提问来源于stack exchange,提问作者Built13




