You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 11:47:32