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

如何基于4月-次年3月财年规则创建保单登记量累计计数器

实现方案

你可以用pandas按以下逻辑实现:

  1. 先将日期列转换为datetime类型,方便后续时间计算
  2. 按日期分组统计每日的保单数量
  3. 给每条数据标记所属的财年分组:月份大于等于4月的归到当前年对应的财年组,1-3月归到上一年对应的财年组,确保同一个财年的数据被分到同一组
  4. 按财年分组后组内计算累计值,就能实现跨财年自动清零重新累计的效果

完整代码示例

import pandas as pd

# 构造示例数据
data = {
    "Policy_No": [1, 2, 3, 4, 5, 6, 7],
    "Date": ["10/1/2020", "20/2/2020", "20/2/2020", "23/3/2020", "18/4/2020", "30/4/2020", "30/4/2020"]
}
df = pd.DataFrame(data)

# 转换日期格式,注意原数据是日/月/年的格式,需要指定format
df["Date"] = pd.to_datetime(df["Date"], format="%d/%m/%Y")

# 按日期统计每日保单数量
daily_count = df.groupby("Date", as_index=False).agg(day_count=("Policy_No", "count"))

# 标记财年分组:4月及之后属于当前年财年组,1-3月属于上一年财年组
daily_count["fiscal_group"] = daily_count["Date"].apply(lambda x: x.year if x.month >= 4 else x.year - 1)

# 按财年分组计算累计保单数
daily_count["Cum count of policies"] = daily_count.groupby("fiscal_group")["day_count"].cumsum()

# 转换日期为字符串格式输出,可选
daily_count["Date"] = daily_count["Date"].dt.strftime("%d/%m/%Y")

# 输出结果
result = daily_count[["Date", "Cum count of policies"]]
print(result)

输出结果

Date  Cum count of policies
0  10/01/2020                      1
1  20/02/2020                      3
2  23/03/2020                      4
3  18/04/2020                      1
4  30/04/2020                      3

注:你给出的预期输出中4月的日期年份写为2021属于笔误,上述结果与你预期的数值逻辑完全匹配。


内容的提问来源于stack exchange,提问作者Abishay Mathew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:06:03