基于Pandas DataFrame计算公司连续分红年限的技术实现
计算Pandas DataFrame中连续股息支付的年数
嘿,这个问题我刚好处理过,给你一个简洁高效的解决方案,完美适配你给出的两个示例场景:
核心思路
我们需要从最新的年份开始往前追溯,统计连续有股息支付(dividend > 0)的年数,直到遇到第一次无股息的年份为止。关键是先确保年份索引按降序排列,再通过分组标记来锁定连续支付的区间。
代码实现
首先构造示例数据(和你给出的示例一致):
import pandas as pd # 示例1:2019-2016年股息分别为1.89、1.70、0、1.5 df1 = pd.DataFrame({'dividend': [1.89, 1.70, 0, 1.5]}, index=[2019, 2018, 2017, 2016]) # 示例2:2019-2016年股息均大于0 df2 = pd.DataFrame({'dividend': [1.89, 1.70, 1.6, 1.58]}, index=[2019, 2018, 2017, 2016])
然后定义计算连续股息年数的函数:
def count_consecutive_dividend_years(df): # 第一步:确保年份索引按降序排列(最新年份在前) sorted_df = df.sort_index(ascending=False) # 第二步:标记每一年是否有股息支付 has_dividend = sorted_df['dividend'] > 0 # 第三步:用累积求和创建分组——第一次出现无股息后,后续年份归为新分组 # (~has_dividend)会把无股息的年份转为True,cumsum会给这些年份分配递增的分组ID groups = (~has_dividend).cumsum() # 第四步:取第一个分组(groups=0,也就是从最新年份开始的连续支付区间)的长度 return len(groups[groups == 0])
测试结果
运行函数验证示例:
print(count_consecutive_dividend_years(df1)) # 输出:2(符合示例1的预期) print(count_consecutive_dividend_years(df2)) # 输出:4(符合示例2的预期)
边界情况处理
这个函数还能覆盖特殊场景:
- 如果所有年份都无股息,返回
0 - 如果只有1年有股息,返回
1 - 如果年份索引是乱序的,函数会先自动排序,不影响结果
内容的提问来源于stack exchange,提问作者tanner
相关产品推荐
相关产品推荐

