首页 > 解决方案 > 基于降雨的作物保险赔付计算

问题描述

我正在分析每日降雨量数据,以计算在降雨量过多的情况下农民的保险支出。如果“连续 3 天累积降雨量”在 10 月 1 日至 10 月 31 日期间大于 50 毫米,则政策涵盖。

我能够用 Python 编写代码来查找匹配条件。但是当连续下雨时,结果会有重叠的日期,这是不可接受的支出。

在重叠日期的情况下需要帮助计算最佳支付选项。

for dist in data["dcode"].unique():
    d_data = data[data["dcode"] == dist]
    #print(dist)
    for block in d_data["mandal"].unique():
        prev_rain = 0
        prev_to_date = "01/12/2022"
        for each in rain_dev_input:
            #[(rain_dev_input["TERM"] == "DEFICIT RAINFALL") & (rain_dev_input["DIST_CODE"] == 240)]:
            #print(each)
            distcode = each["DIST_CODE"]
            #print(distcode)
            term = str(each["TERM"])
            if (distcode == dist) & (term == "EXCESS RAINFALL"):
                start_date = each["FROM_PERIOD"]
                end_date = each["TO_PERIOD"]
                s_date = datetime.datetime.strptime(start_date, "%d/%m/%y")
                e_date = datetime.datetime.strptime(end_date, "%d/%m/%y")
                #s_date = start_date.strftime(start_date, "%Y-%m-%d")
                #e_date = end_date.strftime(end_date, "%Y-%m-%d")
                #count1 = daterange(s_date, e_date)
                #print(s_date, ": ", e_date)

                m_data = d_data[d_data["mandal"] == block]
                p_data = m_data.loc[start_date:end_date]
                for singledate in daterange(s_date, e_date):
                    #print("Inside Excess Rain")
                    from_date = datetime.datetime.strftime(singledate, "%Y-%m-%d")
                    to_date = datetime.datetime.strftime(
                        (singledate + timedelta(2)), "%Y-%m-%d"
                    )
                    total_rain = p_data.loc[from_date:to_date]["rain"].sum()
                    #print(total_rain)
                    range1 = float(each["RANGE1"])
                    range2 = float(each["RANGE2"])

                    if (total_rain >= range1) & (total_rain < range2):
                        #print("inside write to file")
                        if (from_date <= prev_to_date <= to_date) & (prev_rain <= total_rain):
                            temp["Max"] = total_rain;

                        prev_rain = total_rain
                        prev_to_date = to_date
                        temp = dict()
                        temp["district"] = each["DIST_NAME"]
                        temp["mandal"] = block
                        temp[
                            "category"
                        ] = "excess rainfall for 3 consecutive days, cumulative"
                        temp["rainfall"] = total_rain
                        temp["from_date"] = from_date
                        temp["to_date"] = to_date
                        temp["phase"] = each["PHASE"]
                        #temp["insurance"] = insurance_excessrain(each, total_rain)
                        temp["insurance"] = (total_rain - range1)* each["PAYOUT"]
                        excess_rainfall.append(temp)
# %%
# output excess rainfall rain_dev_list data
excess_rain = pd.DataFrame(excess_rainfall)
excess_rain.to_csv(str(output_folder) + "/excess_rainfall_2020_h2.csv", index=False)

此结果的日期重叠

此结果的日期重叠

每日降雨量样本数据

每日降雨量样本数据

标签: pythonweather

解决方案


推荐阅读